Jcode::CP932 0.01

Jcode::CP932 0.01

 とりあえず作りました。Jcode-2.05がベースです。use Jcodeするかわりにuse Jcode::CP932することで使えます。

 Jcode->new()を使っている場合はJcode::CP932->new()に変更する必要がありますが、jcode()を使っている場合はuseの部分を変更するだけで動くはずです*1

 CPANにアップする予定はありません。


 基本的にはJcode.pm(の旧版)と同じですが、Unicode変換まわりを変更しています(具体的にはEncodeモジュールを使ってCP932で変換するようにしています)。

 なお、EUCや7ビットJISについては、CP51923やeucJP-ms、CP5022xとの互換性については検証していません。このため何らかの問題が生じる可能性があります。

 ――弾さんが互換性を持たせるのを嫌がっていた理由がよく分かりました。

 変換テーブルの検証とかが大変なのね。。。

補足

 どうせCPANに上げるなら

  • Unicodeの正規化処理
  • Encode::EUCJPMS
  • Encode::CP5022x(あるいは相当のもの)

に対応して、Jcode-2.x互換にしたほうが良いと思うんですが、どうなんでしょうかね。

 正規化処理さえあればJcode::CP932は特に必要ないって気もするし、Jcodeインターフェイスのまま使いたいっていう需要はありそうな気もするけど。

 少なくとも

# 森山 将之 『Encodeモジュール用の cp51932、cp5022[01] (ユーザー定義文字なし) の超手抜き実装の例。(以前、試しに作ったものです)

http://www2d.biglobe.ne.jp/~msyk/software/perl5/CP932Family.pm

 Unicode との変換は、cp932 を使用し、jcode.pl で eucjis との変換を行う。

 jcode.pl を使っているので、ユーザー定義文字は〓に置換されます。』*

を参考にしてある程度正しくCP51932とCP5022[01]に変換するようにしないとね。

CP51932やCP50220、CP20221に対応させるには

 大雑把にいうと

  • CP932はIBM拡張文字を使い、それ以外はNEC選定IBM拡張文字を使うから、それらの変換が必要?
  • CP50220は半角カナを扱わないから、半角カナは全角に変換するなどの対処をする?

――って感じなのかな。

 CP932Family.pmの変換ロジックをそのまま使えばいいか……。

*1:あとはJcode::convert()を使っている場合はJcode::CP932::convert()にする必要がある。……テストで修正したのはだいたいその辺だったので。