MW211 EXIT

devlog
PHP/Shift_JISとUTF-8
2012年05月12日
「UTF-8」にあるのに「Shift_JIS」にはない文字というのがある。

(マルチバイト文字)「1文字」に対して「Shift_JIS」は「2バイト」使うのに対して
「UTF-8」は「3バイト」とか使うのだから、当然そういう文字があっても不思議はない。

で、そういう文字を「UTF-8→Shift_JIS」変換したらどうなるのか?
大抵は「?」とか特定の文字に変換される。
┌──────────────────────────────────────┐
│mb_convert_encoding('■', 'SJIS-win', 'UTF-8');                             │
└──────────────────────────────────────┘
この結果は「?」となる。(「■」が「UTF-8」固有文字だったとする)

┌──────────────────────────────────────┐
│mb_convert_encoding('あいう■えお', 'SJIS-win', 'UTF-8');                   │
└──────────────────────────────────────┘
ちなみにこういう混在している場合は「あいう?えお」となる。
→他の文字に悪影響は与えない

では、「UTF-8→Shift_JIS→UTF-8」と行って来い変換した場合は?
┌──────────────────────────────────────┐
│mb_convert_encoding(mb_convert_encoding('■', 'SJIS-win', 'UTF-8'),         │
│                    'UTF-8',                                                │
│                    'SJIS-win');                                            │
└──────────────────────────────────────┘
結果は「?」。

一旦「?」になってしまったら、もう「?」なのだ。
分類:PHP、文字コード