文字コードは AP 科目Aで必出。ASCII・Unicode・UTF-8・Shift_JIS の関係と、エンコード/デコードの仕組みを押さえます。
文字コードは『文字 ↔ 数値』の対応規則。
代表的なものは ASCII (英数字記号 7ビット)、Shift_JIS (日本語 8〜16ビット)、Unicode (世界中の文字を統一)。
Unicode と UTF-8 って違うものなの?
違うのよ。
Unicode は『各文字に固有の番号 (コードポイント) を振る規則』で、UTF-8・UTF-16・UTF-32 はそれを『バイト列にエンコードする方式』なの。
例えば『あ』のコードポイントは U+3042 で、UTF-8 では3バイト (E3 81 82) で表されるわ。
UTF-8 はどうしてこんなに普及したのぉ?
理由は4つあって、(1) ASCII 互換で英数字は1バイト、(2) 可変長で空間効率が良い、(3) バイト順序の問題がない、(4) 不正なバイト列を検出しやすい、ということ。
Web の標準は UTF-8 で、実際 Web の98%以上が UTF-8 なんですよ。
AP では『UTF-8 でひらがな1文字は何バイトか』『Shift_JIS と UTF-8 の文字化けの仕組み』が頻出ということね。
あと『BOM (Byte Order Mark)』も時々出るわよ。
UTF-8 の BOM は EF BB BF。
文字化けってなんで起きちゃうの?
送信側と受信側で異なる文字コードを使うと発生するの。
たとえば UTF-8 で書いたファイルを Shift_JIS だと思って読むと、バイト境界がずれて意味不明な文字列になってしまう。
HTML の <meta charset='UTF-8'> や HTTP ヘッダの Content-Type で指定する重要性は、まさにここにあるんですよ。
確認クイズ
UTF-8 エンコーディングの特徴として、最も適切なものはどれか。
- 全文字を 4バイト固定長で表現する
- ASCII 互換で、英数字は 1バイト・日本語は 3バイトの可変長
- UTF-16 と完全に同じバイト列で表現される
- BOM が必須である
こたえを見る
正解: 2. ASCII 互換で、英数字は 1バイト・日本語は 3バイトの可変長
UTF-8 は ASCII 互換の可変長エンコーディング。英数字 1バイト、ヨーロッパ言語 2バイト、日本語等のCJK 3バイト、絵文字等の補助文字 4バイト。Web では事実上の標準で、BOM はオプション (むしろ無しを推奨することも多い)。