LoginSignup
6
2

More than 3 years have passed since last update.

よく遭遇する文字コードと、その罠

Last updated at Posted at 2019-06-08

文字コードの世界は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」を見たときは、実際の文字コードはなんなのか確認しましょう。

6
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2