[PHP-users 16087]Re: 機種依存文字や外字について

ino-php @ altovision.co.jp ino-php @ altovision.co.jp
2003年 6月 20日 (金) 19:41:52 JST


こんにちは。
猪内と申します。

> PHPで、機種依存文字や外字をチェックする
> プログラムを作っています。
> 
> 環境
> ・PHP バージョン : 4.2.2
> 
> 外字範囲
> ・SJISの0xF040以降
> 
> 問題
> ・コードが変化する
> 
> 
> ■EUCで渡ってきたデータをSJISに変換して、コードを表示
> ---------------------------------------------
> // $sjis ・・ SJISに変換したデータ
> // $euc_data ・・ EUCで渡ってきたデータ
> $sjis = mb_convert_encoding($euc_data, "SJIS", "EUC-JP");
> echo $sjis;
> ---------------------------------------------
> 
> 「森」(SJISコード「9058」)という時をSJISに変換した場合、
> 「9058」と上手くSJISに変換されます。
> しかし外字(例えばSJISコード「fa5c」)を、SJISに変換すると
> 「ed40」と変換されてしまいました。

> SJISコード「fa5c」で試した場合、「ed40」とコードが変化するのは
> 何故でしょう?
> 色々調べたのですが、どうしてもわかりませんでした。
> おわかりになる方がいましたら、ご教授ください。
> よろしくお願いいたします。


Windows(CodePage 932)で一部の漢字が「IBM拡張漢字」と「NEC選定のIBM拡張漢
字」として2重に登録されているのが原因だと思います。

http://plaza13.mbn.or.jp/~konton/DATA/KANJI/MS2UCMJ.TXT
こちらのページで上記の該当する「0xFA5C」と「0xED40」という同じ字形で異な
るコードにマッピングされているのが分かります。
(UnicodeやEUC-JPでは同じコードになっています)

mb_convert_encodingはEUCからShiftJISへの変換の際に後者に変換しているよう
です。

http://www.tim.hi-ho.ne.jp/hebiguchi/KanjiCode/kakucyo.htm
こちらのページにIBM拡張漢字の事などが書かれています。

_______________________________________________________________________

猪内 学 (INOUCHI Manabu) inouchi @ altovision.co.jp


PHP-users メーリングリストの案内