📜

レガシーエンコーディング・サバイバルガイド: ASCIIからGB18030まで

20以上のエンコーディングの実践的概要。エンコーディングの関係性と識別方法。

エンコーディングの系譜

Unicode 以前は、各言語に固有のエンコーディングが必要でした。その結果、同じ問題を異なる方法で解決する規格が乱立しました:

年代エンコーディング文字数
1963ASCII128(英語のみ)
1987ISO 8859-1 (Latin-1)256(西欧)
1990年代Windows コードページ各256(地域別)
1978年〜CJK ダブルバイト6,000〜20,000(東アジア)
1991年〜Unicode (UTF-8/16)15万以上(全言語)

このツールは20以上のレガシーエンコーディングのバイト列を同時に表示し、同じ文字がシステムごとにどう表現されるか比較できます。

シングルバイト・エンコーディング

シングルバイト・エンコーディングは各バイト (0x00-0xFF) を1文字にマップします。下半分 (0x00-0x7F) は ASCII 共通ですが、上半分 (0x80-0xFF) は異なります:

エンコーディング地域上半分の内容
ISO 8859-1 / Latin-1西欧àáâãäå, ñ, ü, ß 等
Windows-1252西欧同上 + €, , — 等
ISO 8859-2中央ヨーロッパą, ć, č, ě, ł, ő, ž 等
Windows-1251キリル文字А-Я, а-я 等
KOI8-Uウクライナキリル文字(異なる配置)

WHATWG は iso-8859-1windows-1252 として扱います。ISO 8859-1 で C1 制御文字の 0x80-0x9F が、Windows-1252 ではタイポグラフィ文字(€, ", —)になります。

東アジアのダブルバイト・エンコーディング

CJK 言語は数千の文字が必要なため、マルチバイト・エンコーディングを使用します:

エンコーディング言語規格
Shift_JIS / CP932日本語JIS X 0208 / Windows-31J
EUC-JP日本語JIS X 0208 (Unix系)
ISO-2022-JP日本語JIS X 0208 (メール)
Big5中国語(繁体字)台湾規格
GBK / GB18030中国語(簡体字)中国規格
EUC-KR (CP949)韓国語KS X 1001 / UHC

同じ CJK 文字でもエンコーディングごとに全く異なるバイト列になります。このツールで並べて比較できます。

自動検出の仕組み

このツールは2つの方法で各文字に関連するエンコーディングを自動検出します:

CJK 文字: Unihan IRG ソースデータベース(88,000字以上)で各国規格への収録状況を確認。単純なエンコード可否チェックより正確です。

その他のスクリプト: 各グループの最も広いエンコーディング(西欧は Windows-1252、キリルは Windows-1251 等)でのエンコード可否を確認。

関連記事