UTF-8→SJIS/EUC-JPの重複文字をまとめてみた
文字エンコーディングの変換を行うと、異なる2文字が同じ文字に変換されることがあります。このような文字を重複文字と呼ぶことにします。UTF-8→Shift_JISおよびUTF-8→EUC-JPについて、重複文字を自分用の資料としてまとめてみました。
MacOSX上のPHP5.2.9での実験結果ですが、プログラミング言語や環境によらず気をつけるべき文字一覧ということになると思います。
色のついている部分が重複している部分です。「-」となっているのは変換できなかった文字です。また、ヘッダのカッコ数字ごとに文字エンコーディング変換に利用した関数が異なります。詳細は下記の通りです。
- (1) mb_convert_encoding($char, "Shift_JIS", "UTF-8")
- (2) mb_convert_encoding($char, "SJIS-win", "UTF-8")
- (3) iconv("UTF-8", "SHIFT-JIS", $char));
- (4) iconv("UTF-8", "CP932", $char));
- (5) mb_convert_encoding($char, "EUC-JP", "UTF-8")
- (6) mb_convert_encoding($char, "eucJP-win", "UTF-8")
- (7) iconv("UTF-8", "EUC-JP", $char));
- (8) iconv("UTF-8", "EUC-JP-MS", $char));
- | UTF-8 | SJIS (1) |
(2) |
(3) |
(4) |
EUC-JP (5) |
(6) |
(7) |
(8) |
---|---|---|---|---|---|---|---|---|---|
5c | 5c | 5c | - | 5c | 5c | 5c | 5c | 5c | |
c2a5 | 818f | 818f | 5c | - | - | a1ef | 5c | 5c | |
efbfa5 | 818f | 818f | 818f | 818f | a1ef | a1ef | a1ef | a1ef | |
7e | 7e | 7e | - | 7e | 7e | 7e | 7e | 7e | |
e280be | 8150 | 8150 | 7e | - | - | a1b1 | 7e | 7e | |
efbfa3 | 8150 | 8150 | 8150 | 8150 | a1b1 | a1b1 | a1b1 | a1b1 | |
e28096 | 8161 | 8161 | 8161 | 8161 | a1c2 | a1c2 | a1c2 | a1c2 | |
e288a5 | 8161 | 8161 | - | 8161 | a1c2 | a1c2 | - | a1c2 | |
e28892 | 817c | 817c | 817c | 817c | a1dd | a1dd | a1dd | a1dd | |
efbc8d | 817c | 817c | - | 817c | a1dd | a1dd | - | a1dd | |
e3809c | 8160 | 8160 | 8160 | 8160 | a1c1 | a1c1 | a1c1 | a1c1 | |
efbd9e | 8160 | 8160 | - | 8160 | a1c1 | a1c1 | 8fa2b7 | a1c1 | |
c2a2 | 8191 | 8191 | 8191 | 8191 | a1f1 | a1f1 | a1f1 | a1f1 | |
efbfa0 | 8191 | 8191 | - | 8191 | a1f1 | a1f1 | - | a1f1 | |
c2a3 | 8192 | 8192 | 8192 | 8192 | a1f2 | a1f2 | a1f2 | a1f2 | |
efbfa1 | 8192 | 8192 | - | 8192 | a1f2 | a1f2 | - | a1f2 | |
c2ac | 81ca | 81ca | 81ca | 81ca | a2cc | a2cc | a2cc | a2cc | |
efbfa2 | 81ca | 81ca | - | 81ca | a2cc | a2cc | - | a2cc | |
c2a6 | - | - | - | - | 8fa2c3 | 8fa2c3 | 8fa2c3 | 8fa2c3 | |
efbfa4 | - | fa55 | - | fa55 | - | 8fa2c3 | - | 8fa2c3 |
(2)と(6)とか、(5)と(6)とかを見比べてみて重複文字が異なるのは不思議な気がします。
iconvの結果は環境ごとに違うと思います。あくまで僕のMacOSX上のlibiconvの挙動ということですが、(3)は僕が何かミスったのかもしれません。0x5cや0x7eといったASCII文字1文字を変換できないんじゃ、怖くて何にも使えない気がします。