文字コードの世界はUTF-8全盛ですが、他の文字コードもまだまだ使う機会があります。
まぁ、誰でも知っていることだと思いますが、最近後述する「罠」にハマったので、この機会にドキュメント化しておこうと思います。
よく遭遇する文字コード
文字コード名 | 文字集合 | 遭遇する場所 | 備考 |
---|---|---|---|
UTF-8 | ユニコード文字集合(≒あらゆる文字) | どこでも | 現在のデファクトスタンダード |
UTF-16 | ユニコード文字集合(≒あらゆる文字) | 一部のプログラムの内部表現 | |
UTF-32 | ユニコード文字集合(≒あらゆる文字) | 一部のプログラミング言語の内部表現 | 文字種にかかわらず1文字=4バイト。シンプルだが、メモリ効率は悪い |
Punycode | ユニコード文字集合(≒あらゆる文字) | 日本語URL | ユニコードの文字をアルファベット・数字・ハイフンで表す |
Shift_JIS(sjis) | 英数字+日本語 | 古いWindows周り | ASCII前提のプログラムがバグる「ダメ文字」という問題がある |
CP932 | Shift_JISの文字 + 人名漢字など | 古いWindows周り | 後述の罠がある |
EUC-JP | 英数字+日本語 | 古いUnix周り | |
ISO-2022-JP | 英数字+日本語(半角カナを含まない) | メール | |
CP50221 | ISO-2022-JPの文字 + 半角カナなど | メール | 後述の罠がある |
なお、新規コードでは基本的には、どこでもUTF-8を使えば問題ありません。扱える文字種は多く、ASCIIの上位互換であり、Shift_JISのダメ文字のような罠もありません。
もし、他に重要な文字コードがあれば、コメント欄でご指摘いただければと思います(マイコン時代の各社独自の文字コードなど、マイナーな文字コードはたくさんあると思いますが、流石に現在扱うことはないので無視します。)。
罠:Shift_JISが実際にはCP932だったり、ISO-2022-JPが実際にはCP50221だったりする
CP932はMicrosoftがShift_JIS人名漢字などを追加した文字コードです。
別に新しい文字コードを作るのはいいのですが、Windows界隈ではShift_JISと表示されているのに実際にはCP932が使われていることがしばしばあります。
ISO-2022-JPとCP50221も同様。メーラーで文字コードをISO-2022-JPと設定しているのに半角カナや人名漢字を使えることがあるのは、実際にはCP50221でエンコードしているからです。
そして、さらに混乱するのは人々がShift_JISとCP932を混同している(Shift_JISに人名漢字が含まれると思っている)ことがしばしばある一方、Pythonなどのプログラミング言語ではShift_JIS
を本来の文字コードとして扱い、CP932のファイルをShift_JIS
でデコードしようとするとエラーになることです。
「Shift_JIS」「ISO-2022-JP」を見たときは、実際の文字コードはなんなのか確認しましょう。