Jcode.pm - jcode.pl の後継、Encode.pm への架け橋

[英語][日本語]

Last Modified:Sunday, 11-May-2008 03:16:47 JST

by Dan Kogai


Perl 5.8.0 より、Jcodeの全機能は Encode module を通じてPerlに標準装備となります。Jcodeのメンテナンスは旧Perlのために 今後も続けていく所存ですが、最新のPerlをお使いの方には、より高機能、高 性能、そしてなんといっても標準装備の Encode の方をお薦めします。

Jcode 2.0 より、お使いの Perl Version が 5.8.1 以降の場合は Encode の Wrapper として機能するようになりました。

この場合、Jcode.pm は付属モジュールを必要としないため、 jcode.pl の 場合と同様、Jcode.pm を Library Path に置くだけで利用できるようになり ます。

さらに今回、日本語podも付いてきます!HTML化したものはこちら

それ以前のPerlをお使いの場合、Jcodeはver. 0.88と同じように機能します


Jcode.pm

は、さまざまな日本語文字コードをPerlで扱うためのModuleです。 jcode.pl-2.10 の全機能に加えて、

詳しくは Jcode.html (Jcode.pm をpod2htmlしたもの)を御覧下さい。

更新履歴

Changes を参照してください。さらに古い履歴に関してはChanges.ver0Xを参照して下さい。

御質問およびバグレポート

Jcode.pmの OpenLab プロジェクト化にともない、Jcode.pmのためのMLが新設されました。


インストール

簡単です。

via CPAN

ネットワークの帯域幅を考えれば、こちらがおすすめです。CPANモジュールはバージョン番号のチェックも行ってくれるので、常に同じ方法で最新版をインストールすることができます。

  1. まずPerl5をお使いであることを確認してください。Jcode.pmはPerl5専用です。
  2. 以下のとおりShellからCPANモジュールを起動します。

    $ perl -MCPAN -e shell

  3. はじめてCPANモジュールを実行した場合、いくつかの質問に答えることになります。ほとんどはネットワーク関連の簡単な質問です。ミラーサイトの選択ですが、日本の方は

    http://www.ring.gr.jp/pub/lang/perl/CPAN/

    をお試し下さいませ。

  4. あとは"install Jcode"と入力するだけです。

    cpan> install Jcode

    あとはCPANモジュールが、ダウンロード、テスト、そしてインストールまで全て面倒をみてくれます。

Tarballを直接入手

CPANのアップデートが待てない貴女貴兄はこちら。

  1. Make sure you have perl5. Jcode.pm is for perl5 only.
  2. download Jcode-2.07.tar.gz or Jcode-2.07.zip.
  3. $ gunzip Jcode-*.tar.gz | tar xf -
    # or "tar zxf Jcode-0.10.tar.gz" if your tar is gnu
  4. $ cd Jcode-*
  5. $ perl Makefile.PL; make; make install

注意:0.50以前のJcodeをインストールした方、

"perl Makefile.PL"以外の方法で(主にMacおよびWindows)、0.50以前のバージョンをインストールした方は、手で@INCの中のJcode.pmおよびJcodeディレクトリーを削除からインストールしてください。

新しいJcodeでは、Unicode変換が必要なときにまずJcode::Unicodeをロードしようとし、それが駄目な場合(MacやWindows、そしてXSがサポートされていない環境では)Jcode::Unicode::NoXSをロードします。ところがJcode/Unicode.pmが残っていると、Jcode::Unicode::NoXS.pmではなく、そちらがロードされてしまうわけです。お手数ですがよろしくお願いいたします。


使用例

here's some.

jcode.plからの移行

  1. "require 'jcode.pl';" となっている箇所をすべて "use Jcode;"に
  2. "jcode::" となっている箇所を "Jcode::"に

ほとんどの場合、これで十分なはずです。

複数のファイルを一度に変換

perl -MJcode -i.bak -lpe 'Jcode::convert(\$_, "charcode")' files...

or

perl -MJcode -i.bak -lpe 'jcode(\$_)->charcode' files...

original files are ".bak"

mailboxの確認

perl -MJcode -00lne 'print jcode($_)->mime_decode->charcode' $mail


「車輪を再発明」した理由

すでに Encode が出て些か古い内容になっていますが、そのまま記載しておきます。

日本でPerlをお使いの方のほとんどすべては、なんらかの形で jcode.pl のお世話になった 経験があると思います。jcode.pl には必要な機能のほとんどが揃っています が、Perl5の時代になってやや古さを否めなくなってきています。jcode.plの 不満点として、以下をサポートしていないことが挙げられます。

Perl5の機能

jcode.pl はPerl5でも動くことは動きますが、ほとんどの関数にはtypeglobか参照をわたさなければならないので、ちょっと初心者にはとっつきにくいところがありますし、なんといってもPerl5のOOPが使えません。

jcode::convert(\$str, 'jis', jcode::getcode(\$str), "z");
print $str
;

と書く代わりに、

print jcode($str)->h2z->jis;

と書けた方がいいでしょ?

MIME header のサポート

RFC1522 によると、Mailなどのヘッダーに日本語を使うには、iso-2022-jpの文字列にするだけでは十分ではなく、さらにそれをbase64でエンコードした上で =?ISO-2022-JP?B??= で括らなければなりません。jcode.plにはこの機能がありません。

$header = jcode($str)->mime_decode;

とできたらいいと思いませんか?

Unicode のサポート

私はUnicodeはそんなに好きではありませんが、それでも未来がそこにあるのは否めません。


Valid HTML 4.01!