最新版を参照してください!
共通の CCS を用いる CES がたくさんあります。たとえば、EUC-JP、 Shift_JIS、CP932 といった CES は、JIS X 0208 という CCS を共有しています。
これらの CES においては、同じ CCS に属する同じ文字は同じ Unicode 文字に変換されるべきです。しかしながら、 数十の文字について、このことが実現していません。
以下の表は、JIS X 0208 の同じ文字が、異なる変換表を用いることで Unicode の異なる文字に変換されてしまう、というものを集めたものです。
--------------------------------------------------------------------------------------------- 変換元 Unicode への変換結果** / 東アジア文字幅 CCS Shift_JIS* EUC-JP* 0208 SJIS CP932 APPLE 0221A 0221B JAVAA JAVAB --------------------------------------------------------------------------------------------- [ASCII] 0x5C ---- 0x5C ---- ---- ---- ---- ---- 005C/Na ---- 005C/Na 0x7E ---- 0x7E ---- ---- ---- ---- ---- 007E/Na ---- 007E/Na [JISX0201 ローマ字] 0x5C 0x5C ---- ---- 00A5/Na 005C/Na 00A5/Na 00A5/Na ---- 005C/Na 00A5/Na 0x7E 0x7E ---- ---- 203E/N 007E/Na 007E/Na 203E/N ---- 007E/Na 203E/N [JISX0208] 0x2131 0x81 0x50 0xA1 0xB1 FFE3/F FFE3/F FFE3/F FFE3/F FFE3/F 203E/N FFE3/F FFE3/F 0x213D 0x81 0x5C 0xA1 0xBD 2015/A 2015/A 2015/A 2014/A 2014/A 2014/A 2015/A 2015/A 0x2140 0x81 0x5F 0xA1 0xC0 005C/Na 005C/Na FF3C/F FF3C/F 005C/Na FF3C/F FF3C/F FF3C/F 0x2141 0x81 0x60 0xA1 0xC1 301C/W 301C/W FF5E/F 301C/W 301C/W 301C/W 301C/W 301C/W 0x2142 0x81 0x61 0xA1 0xC2 2016/A 2016/A 2225/A 2016/A 2016/A 2016/A 2016/A 2016/A 0x215D 0x81 0x7C 0xA1 0xDD 2212/N 2212/N FF0D/F 2212/N 2212/N 2212/N 2212/N 2212/N 0x216F 0x81 0x8F 0xA1 0xEF FFE5/F FFE5/F FFE5/F FFE5/F FFE5/F 00A5/Na FFE5/F FFE5/F 0x2171 0x81 0x91 0xA1 0xF1 00A2/Na 00A2/Na FFE0/F 00A2/Na 00A2/Na 00A2/Na 00A2/Na 00A2/Na 0x2172 0x81 0x92 0xA1 0xF2 00A3/Na 00A3/Na FFE1/F 00A3/Na 00A3/Na 00A3/Na 00A3/Na 00A3/Na 0x224C 0x81 0xCA 0xA2 0xCC 00AC/Na 00AC/Na FFE2/F 00AC/Na 00AC/Na 00AC/Na 00AC/Na 00AC/Na [JISX0212] 0x2217 ---- 0x8F,A2,97 ---- ---- ---- ---- 007E/Na FF5E/F ---- ---- ---------------------------------------------------------------------------------------------
注 1 この表は、日本のエンコーディングのみを扱っています。
注 2 この表は、各ベンダー独自の拡張文字を扱っていません。
注 * ASCII、JIS X 0201 ローマ字、JIS X 0208 から計算で求めた値。 EUC-JP の計算法は http://www.unicode.org/Public/MAPPINGS/EASTASIA/JIS/JIS0208.TXT に記述があります。JIS X 0208 から Shift_JIS への計算法は、
です。ここで、in1 と in2 が JIS X 0208 の第 1 バイトと第 2 バイトで、out1 と out2 が Shift_JIS の第 1 バイトと第 2 バイトです。 "SJIS", "CP932", "Win98", "Apple" の変換表を使った変換の 変換元には、Shift_JIS の値を用いています。なぜなら、 それらはすべて Shift_JIS の上位互換 (独自拡張を除けば Shift_JIS と同じとみなすべき) だからです。out1 = (((in1 - 1) >> 1) + (in1 <= 0x5e) ? 0x71 : 0xb1); out2 = in2 + ((in1 & 1) ? ((in2 < 0x60) ? 0x1f : 0x20) : 0x7e);
注 ** 用いた変換表の略称と説明は以下の通りです。
このように、日本のエンコーディングにおける同じ文字が、 用いる変換表によって、異なる Unicode 文字に変換されています。 特に、CP932 (比較的相違が大きい) は Microsoft 製 OS のなかで Shift_JIS と呼ばれ、非常に広く使われています。 これは、Unicode が将来日本で広く使われるようになったとき、 多大な問題を引き起こすことになると思われます。
訳注: 変換表 0208, SJIS は、現在ではそれぞれ http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/JIS0208.TXT と http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/SHIFTJIS.TXT です。