2006-11-02

JISとCP932のUNICODEマッピングの違いの一覧表ってどこかになかったっけ?

 どこかで見た気がするんだけど忘れてしまった。

 とりあえず、Lingua::JA::Mailで使っていたものと、市岡さんの書かれたものを参考にしてみた。

                                # JIS => CP932 
$pkg->set_jis_cp932(
    #"\x{FF3C}" => "\x{005C}",   # FULLWIDTH REVERSE SOLIDUS => REVERSE SOLIDUS
    #"\x{FFE5}" => "\x{00A5}",   # FULLWIDTH YEN SIGN => YEN SIGN
    #"\x{2014}" => "\x{2015}",   # EM DASH => HORIZONTAL BAR
    #"\x{FFE3}" => "\x{203E}",   # FULLWIDTH MACRON => OVERLINE
    "\x{2016}" => "\x{2225}",   # DOBULE VERTICAL LINE => PARALLEL TO
    "\x{2212}" => "\x{FF0D}",   # MINUS SIGN => FULLWIDTH HYPHEN-MINUS
    "\x{301C}" => "\x{FF5E}",   # WAVE DASH  => FULLWIDTH TILDE
    "\x{00A2}" => "\x{FFE0}",   # CENT SIGN  => FULLWIDTH CENT SIGN
    "\x{00A3}" => "\x{FFE1}",   # POUND SIGN => FULLWIDTH POUND SIGN
    "\x{00AC}" => "\x{FFE2}",   # NOT SIGN   => FULLWIDTH NOT SIGN
);

 ……これで合ってるのかな。

 間違いや過不足がありましたら、ご指摘お願いします*1

追記

 貞廣さんが作られているSJIS関連のモジュールを使えそうな気もするけど、ちょっと違う気もする。ううむ。

Encode-EUCJPMS-0.07.zip

 そういえばppmファイルを作っておいたんだった。→ダウンロード

 http://ppm.tcool.org あたりでちゃんとしたものを公開してくれると嬉しいなぁ、とか言ってみる。

tr///で変数展開するにはevalする必要があるわけですが、

 とりあえず

  eval "\$\$str_ref =~ tr/$src/$dest/";
  die $@ if $@;

――とかやってるのですが、呼び出すたびにevalするのは無駄な気がする。

 $srcと$destをセットした時にコンパイルして保存しておく方法ってないのかな。それとも上記でもパフォーマンスは落ちない?

Jcode.pmのencoding変換メソッドのテーブルをクラスごとに分離できればいいのに。

 現在の実装だとappend,convert,setがmy変数に依存してるからクラスごとに分離できないんだよね。

 最初はそれでもいいかと思ったんだけど、やっぱり微妙な気がする。

 appendとsetについてはjname2eをメソッド呼び出しにすれば問題ない気がする。

 convertはJcode::convert()として使うからなぁ。Jcode->_convertを呼び出すようにしちゃえば解決するんだけど。ダメかな?

*1:上の4つは変換するとまずそうなので修正。ひょっとして、\x{00A5}は\x{005C}に変換すべき?