[PHP-users 6089] iconv の //TRANSLIT について(PHPとあまり関係ないですが)

Moriyoshi Koizumi php-users@php.gr.jp
Tue, 12 Mar 2002 03:32:56 +0900


小泉です。

過去のMLログをみましたが既出ではないようなので投稿します。
長いメールですいません。

mb_convert_encoding + mb_convert_kana を使えばまったく問題ないんですが、
事情(サーバの関係)により日本語のエンコーディングの変換に iconv を使っています。

--------------------------------------------------------------
string iconv( string in_enc, string out_enc, string str )
--------------------------------------------------------------

iconv で問題なのは、
( jcode.phps と組み合わせるのもアリなんですが )
Shift_JIS -> ISO-2022-JP のような、
異なる文字セットを持つエンコーディング間の変換の際に、
そのままでは Shift_JIS にしか含まれないような半角カナが処理されないことです。

iconv のドキュメントを読むと、out_enc に "//TRANSLIT" という文字列を付加すると
異なる文字セット間の変換時に、類似した文字に自動的に置き換えるという機能があると
述べられていました。

これで半角カナも全角カナに置き換わるものだと思い、

iconv( "Shift_JIS", "ISO-2022-JP//TRANSLIT", "アイウエオ" );
("アイウエオ"は半角)

とやると、たしかに ISO-2022-JP で全角の "アイウエオ" を返してくるのですが、

iconv( "Shift_JIS", "ISO-2022-JP//TRANSLIT", "ホケ゛ホケ゛" );
("ホケ゛ホケ゛"は半角)

とやると、

(全角で)"ホケ゛ホケ゛" もしくは (全角で) "ホゲホゲ" が返されると思うのですが、
何故か空文字列が返されるようなのです。

libiconv の仕様もしくはバグだと思うのですが、
この状況について触れている資料はあるのでしょうか?
libiconv のドキュメントを参照しても見当たらないし、
ドキュメントにあった libiconv のページはリンク切れだし
google でも "iconv translit" で 数件しか出てこないし、
メンテナの居るようなMLも見当たらないです。
どなたか知っている方、助言してもらえるとうれしいです。

余談ですが、
実験してみたら "//TRANSLIT" では、
CP932(参考までに、Windows で使われている Shift_JIS の変種)に固有である
丸数字の "1" "2" "3" や 某所でおなじみの "トン" "ドル" "ミリバール" までもが
ISO-2022-JPに変換時に、
それぞれ (半角で) "(1)" "(2)" "(3)"、 (全角で) "トン" "ドル" "ミリバール" に
直されるようです。