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

「PHP」mb_convert_encoding 関数で EUC-JP から UTF-8 へのエンコーディング変換

mb_convert_encoding 関数の EUC-JP から UTF-8 へのエンコーディング変換について、ちょっと調べたのでごにょごにょと。

PHP: mb_convert_encoding - Manual
http://php.net/manual/ja/function.mb-convert-encoding.php

具体的には、以下の「髙」を変換する際に、変換元エンコーディング ( 第三引数 ) に何を指定したらいいか?ってことです。

・Unihan data for U+9AD9
http://unicode.org/cgi-bin/GetUnihanData.pl?codepoint=9AD9

結論は「髙」が CP51932 でエンコードされてる場合は "CP51932"eucJP-msエンコードされてる場合は "euc-JP-win" を指定する感じです。

EUC-JP - Wikipedia
https://ja.wikipedia.org/wiki/EUC-JP

PHP: サポートされる文字エンコーディング - Manual
http://php.net/manual/ja/mbstring.supported-encodings.php
※ 詳細の記載がないのでなんともですが、"eucJP-win" が eucJP-ms に対するエンコーディングを指していると思われる。

ちなみに「髙」は CP51932 でエンコードされると "0xFCE2"eucJP-msエンコードされると "0x8FF4FB" になるので、どっちかわからんという場合はバイナリエディタなりで確認してあげるといいと思います。

コードは特に必要ないですが、、、、、一応。

<?php
$s = "";
$r = mb_convert_encoding($s, "UTF-8", "CP51932");
//$r = mb_convert_encoding($s, "UTF-8", "euc-JP-win");
printf($r."\n");
?>

$r をダンプしてやるとちゃんと "0xE9AB99" になっているはずです。


以上です。

[ 環境情報 ]
CentOS 6.2
PHP 5.3.3