読者です 読者をやめる 読者になる 読者になる

パステル色な日々

気ままに綴るブログ

PHPでEUC-JIS-2004が使えるようになっていた

PHPEUC-JIS-2004が使えるようになっていました。
何かと話がややこしい文字コードの話題ですが少しだけ記事にしてみます。

EUC-JIS-2004 - Wikipedia

EUC-JIS-2004はJIS X 0213の符号化方式のひとつです。
次のような特徴があります。

  • コード値0x20から0x7FまではASCII (厳密にはISO/IEC 646 国際基準版) を用いる。
  • コード値0xA1から0xFEまでは、2バイトを用いてJIS X 0213の第1面を表現する。この部分はJIS X 0208の上位互換である。
  • 0x8Fに続く2バイト文字1文字分 (0xA1から0xFEまでの2バイト) は、JIS X 0213の第2面の文字である。
  • 0x8Eに続く1文字分 (0xA1から0xFEまで) は、JIS X 0201片仮名を表す。

波ダッシュと全角チルダといえばピンとくる方もいらっしゃるとおもうのですが、EUC-JPはJIS X 0212 (補助漢字) をエンコードします。
その時補助漢字は制御文字SS3 (シングルシフトスリー、0x8F) に続けて現れるので3バイトが必要になります。
Internet Explorerではこれを文字化けとして扱います。
そこで次のような変換を行ってみます。

$c = mb_convert_encoding("\x8F\xA2\xB7", 'EUC-JP-2004', 'EUC-JP');
echo bin2hex($c); // 0x7E チルダ

wikiには次のようにも書いてありました。

JIS X 0213第1面はJIS X 0208の上位互換であり、またEUC-JPにおける補助漢字は実態としてほとんど使われていないため、既存のEUC-JPの文書はほとんどの場合そのままEUC-JIS-2004の文書として扱うことができる。

EUC-JIS-2004がEUC-JPの文章をそのまま扱うことができるのであれば、補助漢字など3バイトが必要な表現もうまく表示できそうです。
これでEUC-JPなコードでもInternet Explorerで文字化けせずに表示できるのではないでしょうか。
UTF-8でコードを記述するようになって、かなり経過するのであまり出会うことがないかもしれませんが、もし出会った際には思い出してみてください。