↑ホームに戻る


私家版Jcode日本語化ドキュメント

この文書はJcode.pmのサイトにあるマニュアルをかと〜が勝手に日本語化したものです。
誤訳、誤解、アドバイス等ありましたら、かと〜(kato@momo.biology.tohoku.ac.jp)宛までメールにて連絡いただけると非常に助かります。

'01.07.25: 竹内君からの指摘で「志向」→「指向」としました。
'01.07.27: 星さんからの指摘で"Instance Variables"の部分を「ハッシュではなく配列を」→「ハッシュへのリファレンスではなく配列へのリファレンスを」としました。



NAME

Jcode - Japanese Charset Handler


SYNOPSIS

 use Jcode;
 # 
 # traditional
 Jcode::convert(\$str, $ocode, $icode, "z");
 # or OOP!
 print Jcode->new($str)->h2z->tr($from, $to)->utf8;


DESCRIPTION

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() を依然としてサポートしています。


Methods

以下では、特に言及のないものはすべてJcodeオブジェクトを返却します。

$j = Jcode->new($str [, $icode]);
$strからJcodeオブジェクト$jを作成します。 $icodeで明示的な文字コードの指定をしなかった場合、入力コードは自動的にチェックされます。利用可能なcharsetに関しては、下記のgetcodeの項を参照してください。

オブジェクトは文字列をEUCとして保持します。オブジェクト自身が評価される場合にはEUCに変換された文字列を返却するので、EUCを使っているのであればそのまま"print $j"のように使うことができます。(これは関数がオーバーロードされているためです)

Passing Reference
スカラ値の代わりに、参照を利用して以下のように記述することができます:

Jcode->new(\$str);

この書き方はちょっとだけ時間の節約になります。ただし、$strの値が変換されます(この場合、$strはjcodeオブジェクトと連動してるといえるでしょう)。

$j->set($str [, $icode]);
$jの内部文字列として$strをセットします。 以下のようにJcodeオブジェクトを繰り返し利用するのがお手軽です(これは新たにオブジェクトを作成する時間とメモリの節約になります)。
 # converts mailbox to SJIS format
 my $jconv = new Jcode;
 $/ = 00;
 while(<>){
     print $jconv->set(\$_)->mime_decode->sjis;
 }

$j->append($str [, $icode]);
$jの内部文字列に$strを追加します。

$j = jcode($str [, $icode]);
new()を省いて以下のような書き方が可能です:

$sjis = jcode($str)->sjis;

$euc = $j->euc;
$jis = $j->jis;
$sjis = $j->sjis;
記述されたとおりの文字コードに変換された$jを取得できます。

$iso_2022_jp = $j->iso_2022_jp
$j->z2h->jis と同義です。半角カナは強制的に全角カナに変換されます。

[@lines =] $jcode->jfold([$bytes_per_line, $newline_str]);
$bytes_per_line (デフォルトは72バイト)ごとに、$jcodeの文字列を$newline_str(デフォルトは\n)で区切って折り返します(各行を@linesに格納します)。 2バイト文字を破壊しないようになっていますが、禁則処理はされません。

Methods that use MIME::Base64

以下を利用するためにはMIME::Base64が必要です。インストールは単に以下を実行するだけです:

   perl -MCPAN -e 'CPAN::Shell->install("MIME::Base64")'
$mime_header = $j->mime_encode([$lf, $bpl]);
$strをMIMEヘッダ(RFC1522)に変換します。 $lfを指定すると文字列の折り返しに$lfが利用できます(デフォルトは\n)。$bplは折り返すバイト数を指定します(デフォルトは76バイトで、これを超えることは許されません)。

$j->mime_decode;
Jcodeオブジェクト中のMIMEヘッダをデコードします。

$j->nmatch; でマッチ数を検索することができます。

Methods implemented by Jcode::H2Z

下記のメソッドはJcode::H2Z によりインプリメントされています。

$j->h2z([$keep_dakuten]);
X201仮名(半角カナ)をX208仮名(全角カナ)に変換します。 $keep_dakutenがセットされる場合濁点はそのまま残ります。(すなわち“ga”に変換されずに、"ka+dakuten"となります) $j->nmatch; でマッチ数を検索することができます。

$j->z2h;
X208仮名(全角カナ)をX201仮名(半角カナ)に変換します。 $j->nmatch; でマッチ数を検索することができます。

Methods implemented in Jcode::Tr

下記のメソッドはJcode::Tr によりインプリメントされています。

$j->tr($from, $to);
Jcodeオブジェクトにtrを適用します。 $from および $to には日本語(EUC)を含むことが可能です。 $j->nmatch; でマッチ数を検索することができます。

Methods implemented in Jcode::Unicode

あなたが利用しているperlがXSをサポートしていない(もしくは perl Makefile.PL が実行できない)場合にはJcode::Unicode::NoXSが使用されるでしょう。

詳細に関しては、Jcode::Unicode manpageおよびJcode::Unicode::NoXS manpageを参照してください。

$ucs2 = $j->ucs2;
UCS2(Raw Unicode)形式の文字列を返却します。

$ucs2 = $j->utf8;
utf8形式の文字列を返却します。

Instance Variables

Jcodeオブジェクトのインスタンスにアクセスする必要がある場合に、直接それらにアクセスする代わりに以下のようなアクセス方式があります。

参考までに、Jcodeは速度の最適化のためにハッシュへのリファレンスではなく配列へのリファレンスを使っていますが、以下のアクセス方式を利用している限りこれらのこと知っている必要はありません。

$j->r_str
EUCに変換された文字列への参照。

$j->icode
直前の操作での入力文字コード

$j->nmatch
マッチした数 ($j->tr中でのマッチ数、など)


Subroutines

($code, [$nmatch]) = getcode($str);
$strの文字コードを返します。返される文字コードは以下のとおり:
 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::convert($str, [$ocode, $icode, $opt]);
$strを$ocodeによって指定された文字コードに変換します。$icodeも指定されている場合には、入力ストリングはgetcode()によってチェックされた文字コードではなく$icodeで指定されたコードの文字列として扱われます。 上述のとおり、$strは代わりに\$strを用いることが出来ます。

jcode.plユーザの方へ:この関数はjcode::getcode()の100%上位互換です。

jcode::convert() !


BUGS

JcodeでのるUnicodeのサポートは全く効率的ではありません!


ACKNOWLEDGEMENTS

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.


SEE ALSO

the Jcode::Unicode manpage
the Jcode::Unicode::NoXS manpage


COPYRIGHT

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.