English page もどる

変換表がベンダーによって異なる (2001-04-30)

最新版を参照してください!

共通の 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 への計算法は、

out1 = (((in1 - 1) >> 1) + (in1 <= 0x5e) ? 0x71 : 0xb1);
out2 = in2 + ((in1 & 1) ? ((in2 < 0x60) ? 0x1f : 0x20) : 0x7e);
です。ここで、in1in2 が JIS X 0208 の第 1 バイトと第 2 バイトで、out1out2 が Shift_JIS の第 1 バイトと第 2 バイトです。 "SJIS", "CP932", "Win98", "Apple" の変換表を使った変換の 変換元には、Shift_JIS の値を用いています。なぜなら、 それらはすべて Shift_JIS の上位互換 (独自拡張を除けば Shift_JIS と同じとみなすべき) だからです。

注 ** 用いた変換表の略称と説明は以下の通りです。

このように、日本のエンコーディングにおける同じ文字が、 用いる変換表によって、異なる Unicode 文字に変換されています。 特に、CP932 (比較的相違が大きい) は Microsoft 製 OS のなかで Shift_JIS と呼ばれ、非常に広く使われています。 これは、Unicode が将来日本で広く使われるようになったとき、 多大な問題を引き起こすことになると思われます。

訳注: 変換表 0208, SJIS は、現在ではそれぞれ http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/JIS0208.TXThttp://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/SHIFTJIS.TXT です。

Tomohiro KUBOTA <debian at tmail dot plala dot or dot jp>