GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
Jcode::Nihongo(3) User Contributed Perl Documentation Jcode::Nihongo(3)

Jcode - 日本語文字集合ハンドラ

 use Jcode;
 # 
 # 古式ゆかしく
 Jcode::convert($str, $ocode, $icode, "z");
 # もしくはオブジェクト指向で!
 print Jcode->new($str)->h2z->tr($from, $to)->utf8;

Jcode.pmはオブジェクト的なアプローチと従来からのアプローチの両方を サポートしています。オブジェクト的なアプローチを使えばこんな感じで;

  $iso_2022_jp = Jcode->new($str)->h2z->jis;

こちらよりエレガントでしょう:

  $iso_2022_jp = $str;
  &jcode::convert(\$iso_2022_jp, 'jis', &jcode::getcode(\$str), "z");

オブジェクトに馴染みの無い人のために、Jcode.pmはまだ"getcode()""convert()"をサポートしています。

Perlのバージョンが5.8.1以上なら、Jcodeは、Perl 5.8以降の標準的な文字集合 ハンドラモジュールであるEncodeのラッパーとして振る舞います。

特に言及しない限り、ここで挙げるメソッドは全てJcodeオブジェクトを返します。

$j = Jcode->new($str [, $icode])
$strからJcodeオブジェクト$jを生成します。明示的に$icodeをセットしなければ、 入力コードは自動的に判定されます。利用可能な文字集合については、下の getcodeを参照してください。

Perl 5.8.1以降では、$icodeにはEncodeが理解できる どんなエンコーディング名も使えます。

  $j = Jcode->new($european, 'iso-latin1');
    

オブジェクトを文字列化すると、EUCに変換された文字列が返ります。ですから "print $j->euc"とする代わりに、"print $j"とできます。

リファレンス渡し
スカラー値の代わりに、以下のようにリファレンスを渡せます。

 Jcode->new(\$str);
    

これはほんの少し時間を節約します。その代償として、$strの値そのものが 変換されます(ある意味、$strはjcodeオブジェクトに"tieされる"のです)。

$j->set($str [, $icode])
$jの内部文字列に$strをセットします。繰り返しJcodeオブジェクトを使うときに 便利です(オブジェクトを生成する時間とメモリの節約になります)。

 # mailboxをSJIS形式に変換
 my $jconv = new Jcode;
 $/ = 00;
 while(<>){
     print $jconv->set(\$_)->mime_decode->sjis;
 }
    
$j->append($str [, $icode]);
$jの内部文字列に$strを加えます。
$j = jcode($str [, $icode]);
Jcode->new() の短縮形。以下のようにできます;

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

一般に、$j->encodedとすることでencodedに変換された文字列を得ます。
$sjis = $j->sjis
$euc = $j->euc
$jis = $j->jis
$sjis = $j->sjis
$ucs2 = $j->ucs2
$utf8 = $j->utf8
自明でしょう。 WYCIWYG = What you code is what you get :)
$iso_2022_jp = $j->iso_2022_jp
"$j->h2z->jis"と同じです。 半角カナは強制的に全角に変換されます。

Perl 5.8.1以降では、Encodeがサポートするどんなエンコーディング名と エイリアスでも利用できます。例えば:

  $european = $j->iso_latin1; # メソッド名用に'-'は'_'に置き換えます
    

参考:Encode::Encoderがこれと同じ小技を使っています。

$j->fallback($fallback)
Perl 5.8.1以降では、Jcodeは内部の文字列をUTF-8で保持します。 ->encodingにマップできない文字は'?'に置き換えられますが、 これはEncodeでの標準動作です。

  my $unistr = "\x{262f}"; # 陰陽マーク
  my $j = jcode($unistr);  # $j->euc の結果は '?' に
    

この振る舞いは、Encode同様、フォールバックを指定することで変更できます。 値はEncodeのものと一緒です。便宜のため、"Jcode::FB_PERLQQ""Jcode::FB_XMLCREF""Jcode::FB_HTMLCREF"がEncodeのそれらへの エイリアスになっています。

  print $j->fallback(Jcode::FB_PERLQQ)->euc;   # '\x{262f}'
  print $j->fallback(Jcode::FB_XMLCREF)->euc;  # '&#x262f;'
  print $j->fallback(Jcode::FB_HTMLCREF)->euc; # '&#9775;'
    

グローバル変数$Jcode::FALLBACKにデフォルトのフォールバックが保持 されていますので、この値を代入することでオーバーライドできます。

  $Jcode::FALLBACK = Jcode::FB_PERLQQ; # デフォルトのフォールバックスキーマを設定
    
[@lines =] $jcode->jfold([$width, $newline_str, $kref])
$width(デフォルト:72)毎にjcode文字列内の行を折り返します。 $widthは”半角”文字の数です。全角文字は2文字としてカウントします。

$newline_str(デフォルトは"\n")で指定された改行文字が加わります。 折り返された全行をリストで返します。

Perl 5.8.1以降は3番目の引数$krefにEUCの文字列の配列リファレンスを 渡すことで、簡易的な行頭禁則処理(ぶら下がり)を行えます。

$length = $jcode->jlength();
バイト長ではなく、全角文字も一文字として数えた場合の文字数を返します。

下記のメソッドを使うには、MIME::Base64が必要です。インストールは単純に

   perl -MCPAN -e 'CPAN::Shell->install("MIME::Base64")'

とします。お使いのPerlが5.6以降であるなら、MIME::Base64は バンドルされているので、インストールの必要はありません。

$mime_header = $j->mime_encode([$lf, $bpl])
$strをRFC1522にあるMIME-Headerに変換します。$lfを指定すると、 行の折り返しに$lfが使われます(デフォルト:\n)。 $bplを指定すると、折り返すバイト数に$bplが使われます(デフォルト:76; この数値は76以下でなければなりません)。

Perl 5.8.1以降では、以下のようにしてもMIME Headerエンコードができます:

  $mime_header = $j->MIME_Header;
    

この場合$mime_headerの戻り値はMIME-B-encoded UTF-8になります。 一方、"$j->mime_encode()"はMIME-B-encoded ISO-2022-JPを返します。 最近のほとんどのメーラーはどちらもサポートしています。

$j->mime_decode;
Jcodeオブジェクトの内部文字列をMIME-Headerデコードします。Perl 5.8.1 以降なら、以下のようにして同じことができます:

  Jcode->new($str, 'MIME-Header');
    

こちらの場合、ISO-2022-JPだけではなくUTF-8などにも対応しており、 さらにMIME B EncodingのみならずMIME Q Encodingにも対応している ので、Perl 5.8.1以降であればこちらを使うべきでしょう。

$j->h2z([$keep_dakuten])
X201カナ(半角)をX208カナ(全角)に変換します。 $keep_dakutenに真値をセットすると、濁点をそのままにします (これはつまり、「カ+゛」は「ガ」に変換されずにそのまま になるということです)

$j->nmatchを通じてマッチした数を取得できます。

$j->z2h
X208カナ(全角)をX201カナ(半角)に変換します。

$j->nmatchを通じてマッチした数を取得できます。

"->m()""->s()"を使うには、Perl 5.8.1以降が 必要です。
$j->tr($from, $to, $opt);
Jcodeオブジェクトに"tr/$from/$to/"を適用します。$fromと$toは EUC-JPの文字列です。Perl 5.8.1以降では、flag付きのUTF-8文字列 も受け付けます。

$optをセットすると、"tr/$from/$to/$opt"が適用されます。$optは 'c'、'd'あるいはそれらの組み合わせでなければなりません。

$j->nmatchを通じてマッチした数を取得できます。

Perl 5.8.1以降では、trの形式に誤りのあった場合に->error_trを通じて、 $@を取得できます。

以下のメソッドはPerl 5.8.1以降でのみ利用可能です。

$j->s($patter, $replace, $opt);
個々に"s/$pattern/$replace/$opt"を適用します。$optは正規表現オプションと 同じです。正規表現のオプションについてはperlreを参照ください。

"$j->tr()""$j->s()"はそのオブジェクト自身を返すので、 以下のように操作を連結できます。

  $j->tr("A-Z", "a-z")->s("foo", "bar");
    
[@match = ] $j->m($pattern, $opt);
"m/$patter/$opt"を適用します。このメソッドは”オブジェクトを返さない” ので、"$j->s()"のようにメソッドを連結できないことに注意してください。

正規表現の形式に誤りのあった場合、->error_m、->error_sを通じて $@を取得できます。

もしJcodeオブジェクトのインスタンス変数にアクセスしたいなら、直接それら にアクセスするのではなく、アクセスメソッドを利用しましょう(これぞOOP です)。

参考までに、Jcodeは(一般的な方法である)ハッシュリファレンスの代わりに、 配列リファレンスを使うことで、スピードを最適化しています(実際のところ、 アクセスメソッドを使う限りこのことを知る必要はありません; もう一度 いいますが、これはOOPなのです)。

Perl 5.8.1以降では、ハッシュリファレンスを使うように変更されました。 これにより、Jcodeの拡張はものすごく簡単になります。

$j->r_str
EUC文字列へのリファレンス。

Perl 5.8.1以降ではUTF-8フラグの立ったUTF-8文字列へのリファレンスです。

$j->icode
直近の操作における入力文字コード。
$j->nmatch
マッチした数($j->tr等を使ったとき)。

($code, [$nmatch]) = getcode($str)
$strの文字コードを返します。返るコードは以下の通りです。

 ascii   Ascii (日本語コードを含まない)
 binary  Binary (テキストファイルではない)
 euc     EUC-JP
 sjis    SHIFT_JIS
 jis     JIS (ISO-2022-JP)
 ucs2    UCS2 (Raw Unicode)
 utf8    UTF8
    

スカラーコンテキストの代わりに配列コンテキストを使うと、何文字分の コードが見つかったのかも返します。上の方で述べたように、$strは\$str でも構いません。

jcode.pl 利用者の方へ: この関数はjcode::getcode()と100%上位互換が あります。――まあ、ほぼ100%;

 * 戻り値が配列のとき、その順番は逆となります;
   jcode::getcode()は$nmatchを最初に返します。

 * jcode::getcode()は、EUC文字とSJIS文字の数が等しいとき、'undef'を
   返します。 Jcode::getcode()はEUCを返します。これはJcode.pmには
   中間がないためです。
    
Jcode::convert($str, [$ocode, $icode, $opt])
$strを$ocodeで指定した文字コードに変換します。$icodeも指定すると、 入力文字列をgetcode()でチェックする代わりに、$icodeと仮定します。 上の方で述べたように、$strは\$strでも構いません。

jcode.pl 利用者の方へ: この関数はjcode::convert()と100%上位互換が あります!

Perlが5.8.1以降の場合、JcodeはEncodeのラッパーとして振る舞います。 つまり、JcodeはEncode内のバグの影響を受けます。

このパッケージは、動機、デザインそしてコードの多くの点で、 歌代 和正 <utashiro@iij.ad.jp>氏のPerl4ライブラリjcode.plに負っています。

大崎 博基 <ohzaki@iod.ricoh.co.jp>氏は、開発の非常に初期の段階から 正規表現を磨きあげる手助けをしてくれました。

makamaka@donzoko.net の JEncode には、JcodeとEncodeをどう融合させれば いいか大変大きな啓示を受けました。また、本日本語マニュアルも寄贈して いただきました。

そしてJcode ML <jcode5@ring.gr.jp>の皆さん。この方達なしには、 ここまで完成しなかったことでしょう。

Encode

<http://www.iana.org/assignments/character-sets>

Copyright 1999-2005 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.

2005-02-19 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.