文字コード — ASCII/Unicode/UTF-8/Shift_JIS

ASCII・Shift_JIS・Unicode (UTF-8/UTF-16) の関係、文字化けの仕組み、Web 標準としての UTF-8 を整理。

文字コードは 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 エンコーディングの特徴として、最も適切なものはどれか。

  1. 全文字を 4バイト固定長で表現する
  2. ASCII 互換で、英数字は 1バイト・日本語は 3バイトの可変長
  3. UTF-16 と完全に同じバイト列で表現される
  4. BOM が必須である
こたえを見る

正解: 2. ASCII 互換で、英数字は 1バイト・日本語は 3バイトの可変長

UTF-8 は ASCII 互換の可変長エンコーディング。英数字 1バイト、ヨーロッパ言語 2バイト、日本語等のCJK 3バイト、絵文字等の補助文字 4バイト。Web では事実上の標準で、BOM はオプション (むしろ無しを推奨することも多い)。

🔖 この記事の関連書籍

Amazonアソシエイトリンクを含みます。他分野は おすすめ書籍ページ へ。