この文書はJcode.pmのサイトにあるマニュアルをかと〜が勝手に日本語化したものです。
誤訳、誤解、アドバイス等ありましたら、かと〜(kato@momo.biology.tohoku.ac.jp)宛までメールにて連絡いただけると非常に助かります。
'01.07.25: 竹内君からの指摘で「志向」→「指向」としました。
'01.07.27: 星さんからの指摘で"Instance Variables"の部分を「ハッシュではなく配列を」→「ハッシュへのリファレンスではなく配列へのリファレンスを」としました。
Jcode - Japanese Charset Handler
use Jcode; # # traditional Jcode::convert(\$str, $ocode, $icode, "z"); # or OOP! print Jcode->new($str)->h2z->tr($from, $to)->utf8;
Jcode.pmはオブジェクト指向的、および従来のアプローチの両方をサポートしています。 オブジェクト指向的アプローチを用いて以下のように記述することができます:
$iso_2022_jp = Jcode->new($str)->h2z->jis;
この記述方法は以下のものよりエレガントであるといえます:
$iso_2022_jp = &jcode::convert(\$str,'jis',jcode::getcode(\str), ``z'');
オブジェクト指向に慣れていない人々のために、Jcode.pm は getcode() および convert() を依然としてサポートしています。
以下では、特に言及のないものはすべてJcodeオブジェクトを返却します。
オブジェクトは文字列をEUCとして保持します。オブジェクト自身が評価される場合にはEUCに変換された文字列を返却するので、EUCを使っているのであればそのまま"print $j"のように使うことができます。(これは関数がオーバーロードされているためです)
Jcode->new(\$str);
この書き方はちょっとだけ時間の節約になります。ただし、$strの値が変換されます(この場合、$strはjcodeオブジェクトと連動してるといえるでしょう)。
# converts mailbox to SJIS format my $jconv = new Jcode; $/ = 00; while(<>){ print $jconv->set(\$_)->mime_decode->sjis; }
new()
を省いて以下のような書き方が可能です:
$sjis = jcode($str)->sjis;
以下を利用するためにはMIME::Base64が必要です。インストールは単に以下を実行するだけです:
perl -MCPAN -e 'CPAN::Shell->install("MIME::Base64")'
$j->nmatch; でマッチ数を検索することができます。
下記のメソッドはJcode::H2Z によりインプリメントされています。
下記のメソッドはJcode::Tr によりインプリメントされています。
あなたが利用しているperlがXSをサポートしていない(もしくは perl Makefile.PL が実行できない)場合にはJcode::Unicode::NoXSが使用されるでしょう。
詳細に関しては、Jcode::Unicode manpageおよびJcode::Unicode::NoXS manpageを参照してください。
Jcodeオブジェクトのインスタンスにアクセスする必要がある場合に、直接それらにアクセスする代わりに以下のようなアクセス方式があります。
参考までに、Jcodeは速度の最適化のためにハッシュへのリファレンスではなく配列へのリファレンスを使っていますが、以下のアクセス方式を利用している限りこれらのこと知っている必要はありません。
ascii Ascii (Contains no Japanese Code) binary Binary (Not Text File) euc EUC-JP sjis SHIFT_JIS jis JIS (ISO-2022-JP) ucs2 UCS2 (Raw Unicode) utf8 UTF8
スカラ値の代わりに配列コンテクストが用いられる場合、文字コードがいくつ見つかったかも返却されます。 上述のとおり、$strは代わりに\$strを用いることが出来ます。
jcode.plユーザの方へ:この関数はjcode::getcode()のほぼ100%上位互換です。
* この関数の戻り値が配列の場合、逆順となります。jcode::getcode()では$nmatchを最初に返します。
* EUCコードの文字数がSJISのそれと等しい場合、jcode::getcode()では「undef」を返しますが、Jcode::getcode()はEUCを返します。Jcode.pmについては、in-betweensはありません。jcode.plユーザの方へ:この関数はjcode::getcode()の100%上位互換です。
jcode::convert() !
This package owes a lot in motivation, design, and code, to the jcode.pl for Perl4 by Kazumasa Utashiro <utashiro@iij.ad.jp>.
Hiroki Ohzaki <ohzaki@iod.ricoh.co.jp> has helped me polish regexp from the very first stage of development.
And folks at Jcode Mailing list <jcode5@ring.gr.jp>. Without them, I couldn't have coded this far.
Copyright 1999 Dan Kogai <dankogai@dan.co.jp>
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.