KAKASI の補助漢字
2007-11-04


EUC-JP で 0x8f は補助漢字の1バイト目。KAKASI は3バイト漢字に対応していないため、1バイト目を削除して動くようです。 NKFでは(デフォルトでは)3バイトとも削除します。

$ echo -n -e "\x8f\xd4\xda" | kakasi -ieuc -oeuc| od -tx1
0000000 d4 da
$ echo -n -e "\x8f\xd4\xda" | nkf -Ee | od -tx1
0000000

本来正しい動作ではありませんが、補助漢字をサポートしていない仕様なので文字化けは仕方がないところです。 異常終了しないようになっているだけマシということですね。

補足) これは man KAKASI の EUC のところを見ると説明がありました。

     EUC:
         GL -- G0 -- ASCII
                   G1 -- JISx0201のかたかな
                   G2 -- JISx0201のかたかな
         GR -- G3 -- JISx0208 の文字

この説明にはいささか疑問を持つところもありますが、G3 に JISX0208 を割り当てることになっているので、KAKASI の仕様ということでしょう。 昔の商用 UNIX では補助漢字に対応していなかったので、この仕様は十分に意味がある(あった)と思います。

なお、実際は

     EUC:
         GL -- G0 -- ASCII
         GR -- G1 -- JIS X 0208 の文字
                   G2 -- JIS X 0201のかたかな
                   G3 -- JIS X 0208 の文字 (本来は JIS X 0212 補助漢字)

となっているはずです。

訂正) と思いましたが、man のままで何故かデフォルトで GR に G3 が割り当てられているという変則でした。 そういえば、G4 まで用意していたり、SJIS を同様に扱っていたりとかなりの変則をやっているので??? なところは他にも多々あります。

[開発]
[KAKASI]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット