1Jcode::Nihongo(3)     User Contributed Perl Documentation    Jcode::Nihongo(3)
2
3
4

名前

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

概要

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

説明

17       Jcode.pmはオブジェクト的なアプローチと従来からのアプローチの両方を
18       サポートしています。オブジェクト的なアプローチを使えばこんな感じで;
19
20         $iso_2022_jp = Jcode->new($str)->h2z->jis;
21
22       こちらよりエレガントでしょう:
23
24         $iso_2022_jp = $str;
25         &jcode::convert(\$iso_2022_jp, 'jis', &jcode::getcode(\$str), "z");
26
27       オブジェクトに馴染みの無い人のために、Jcode.pmはまだ"getcode()"と
28       "convert()"をサポートしています。
29
30       Perlのバージョンが5.8.1以上なら、Jcodeは、Perl
31       5.8以降の標準的な文字集合
32       ハンドラモジュールであるEncodeのラッパーとして振る舞います。
33

メソッド

35       特に言及しない限り、ここで挙げるメソッドは全てJcodeオブジェクトを返します。
36
37   コンストラクタ
38       $j = Jcode->new($str [, $icode])
39         $strからJcodeオブジェクト$jを生成します。明示的に$icodeをセットしなければ、
40         入力コードは自動的に判定されます。利用可能な文字集合については、下の
41         getcodeを参照してください。
42
43         Perl 5.8.1以降では、$icodeにはEncodeが理解できる
44         どんなエンコーディング名も使えます。
45
46           $j = Jcode->new($european, 'iso-latin1');
47
48         オブジェクトを文字列化すると、EUCに変換された文字列が返ります。ですから
49         "print $j->euc"とする代わりに、"print $j"とできます。
50
51         リファレンス渡し
52           スカラー値の代わりに、以下のようにリファレンスを渡せます。
53
54            Jcode->new(\$str);
55
56           これはほんの少し時間を節約します。その代償として、$strの値そのものが
57           変換されます(ある意味、$strはjcodeオブジェクトに"tieされる"のです)。
58
59       $j->set($str [, $icode])
60         $jの内部文字列に$strをセットします。繰り返しJcodeオブジェクトを使うときに
61         便利です(オブジェクトを生成する時間とメモリの節約になります)。
62
63          # mailboxをSJIS形式に変換
64          my $jconv = new Jcode;
65          $/ = 00;
66          while(<>){
67              print $jconv->set(\$_)->mime_decode->sjis;
68          }
69
70       $j->append($str [, $icode]);
71         $jの内部文字列に$strを加えます。
72
73       $j = jcode($str [, $icode]);
74         Jcode->new() の短縮形。以下のようにできます;
75
76          $sjis = jcode($str)->sjis;
77
78   文字列のエンコード
79       一般に、$j->encodedとすることでencodedに変換された文字列を得ます。
80
81       $sjis = $j->sjis
82       $euc = $j->euc
83       $jis = $j->jis
84       $sjis = $j->sjis
85       $ucs2 = $j->ucs2
86       $utf8 = $j->utf8
87         自明でしょう。 WYCIWYG = What you code is what you get :)
88
89       $iso_2022_jp = $j->iso_2022_jp
90         "$j->h2z->jis"と同じです。 半角カナは強制的に全角に変換されます。
91
92         Perl 5.8.1以降では、Encodeがサポートするどんなエンコーディング名と
93         エイリアスでも利用できます。例えば:
94
95           $european = $j->iso_latin1; # メソッド名用に'-'は'_'に置き換えます
96
97         参考:Encode::Encoderがこれと同じ小技を使っています。
98
99         $j->fallback($fallback)
100           Perl 5.8.1以降では、Jcodeは内部の文字列をUTF-8で保持します。
101           ->encodingにマップできない文字は'?'に置き換えられますが、
102           これはEncodeでの標準動作です。
103
104             my $unistr = "\x{262f}"; # 陰陽マーク
105             my $j = jcode($unistr);  # $j->euc の結果は '?' に
106
107           この振る舞いは、Encode同様、フォールバックを指定することで変更できます。
108           値はEncodeのものと一緒です。便宜のため、"Jcode::FB_PERLQQ"、
109           "Jcode::FB_XMLCREF"、"Jcode::FB_HTMLCREF"がEncodeのそれらへの
110           エイリアスになっています。
111
112             print $j->fallback(Jcode::FB_PERLQQ)->euc;   # '\x{262f}'
113             print $j->fallback(Jcode::FB_XMLCREF)->euc;  # '&#x262f;'
114             print $j->fallback(Jcode::FB_HTMLCREF)->euc; # '&#9775;'
115
116           グローバル変数$Jcode::FALLBACKにデフォルトのフォールバックが保持
117           されていますので、この値を代入することでオーバーライドできます。
118
119             $Jcode::FALLBACK = Jcode::FB_PERLQQ; # デフォルトのフォールバックスキーマを設定
120
121       [@lines =] $jcode->jfold([$width, $newline_str, $kref])
122         $width(デフォルト:72)毎にjcode文字列内の行を折り返します。
123         $widthは”半角”文字の数です。全角文字は2文字としてカウントします。
124
125         $newline_str(デフォルトは"\n")で指定された改行文字が加わります。
126         折り返された全行をリストで返します。
127
128         Perl 5.8.1以降は3番目の引数$krefにEUCの文字列の配列リファレンスを
129         渡すことで、簡易的な行頭禁則処理(ぶら下がり)を行えます。
130
131       $length = $jcode->jlength();
132         バイト長ではなく、全角文字も一文字として数えた場合の文字数を返します。
133
134   MIME::Base64を使うメソッド
135       下記のメソッドを使うには、MIME::Base64が必要です。インストールは単純に
136
137          perl -MCPAN -e 'CPAN::Shell->install("MIME::Base64")'
138
139       とします。お使いのPerlが5.6以降であるなら、MIME::Base64は
140       バンドルされているので、インストールの必要はありません。
141
142       $mime_header = $j->mime_encode([$lf, $bpl])
143         $strをRFC1522にあるMIME-Headerに変換します。$lfを指定すると、
144         行の折り返しに$lfが使われます(デフォルト:\n)。
145         $bplを指定すると、折り返すバイト数に$bplが使われます(デフォルト:76;
146         この数値は76以下でなければなりません)。
147
148         Perl 5.8.1以降では、以下のようにしてもMIME
149         Headerエンコードができます:
150
151           $mime_header = $j->MIME_Header;
152
153         この場合$mime_headerの戻り値はMIME-B-encoded UTF-8になります。
154         一方、"$j->mime_encode()"はMIME-B-encoded ISO-2022-JPを返します。
155         最近のほとんどのメーラーはどちらもサポートしています。
156
157       $j->mime_decode;
158         Jcodeオブジェクトの内部文字列をMIME-Headerデコードします。Perl 5.8.1
159         以降なら、以下のようにして同じことができます:
160
161           Jcode->new($str, 'MIME-Header');
162
163         こちらの場合、ISO-2022-JPだけではなくUTF-8などにも対応しており、
164         さらにMIME B EncodingのみならずMIME Q Encodingにも対応している
165         ので、Perl 5.8.1以降であればこちらを使うべきでしょう。
166
167   半角 ←→ 全角
168       $j->h2z([$keep_dakuten])
169         X201カナ(半角)をX208カナ(全角)に変換します。
170         $keep_dakutenに真値をセットすると、濁点をそのままにします
171         (これはつまり、「カ+゛」は「ガ」に変換されずにそのまま
172         になるということです)
173
174         $j->nmatchを通じてマッチした数を取得できます。
175
176       $j->z2h
177         X208カナ(全角)をX201カナ(半角)に変換します。
178
179         $j->nmatchを通じてマッチした数を取得できます。
180
181   正規表現エミュレータ
182       "->m()"と"->s()"を使うには、Perl 5.8.1以降が 必要です。
183
184       $j->tr($from, $to, $opt);
185         Jcodeオブジェクトに"tr/$from/$to/"を適用します。$fromと$toは
186         EUC-JPの文字列です。Perl 5.8.1以降では、flag付きのUTF-8文字列
187         も受け付けます。
188
189         $optをセットすると、"tr/$from/$to/$opt"が適用されます。$optは
190         'c'、'd'あるいはそれらの組み合わせでなければなりません。
191
192         $j->nmatchを通じてマッチした数を取得できます。
193
194         Perl 5.8.1以降では、trの形式に誤りのあった場合に->error_trを通じて、
195         $@を取得できます。
196
197         以下のメソッドはPerl 5.8.1以降でのみ利用可能です。
198
199       $j->s($patter, $replace, $opt);
200         個々に"s/$pattern/$replace/$opt"を適用します。$optは正規表現オプションと
201         同じです。正規表現のオプションについてはperlreを参照ください。
202
203         "$j->tr()"、"$j->s()"はそのオブジェクト自身を返すので、
204         以下のように操作を連結できます。
205
206           $j->tr("A-Z", "a-z")->s("foo", "bar");
207
208       [@match = ] $j->m($pattern, $opt);
209         "m/$patter/$opt"を適用します。このメソッドは”オブジェクトを返さない”
210         ので、"$j->s()"のようにメソッドを連結できないことに注意してください。
211
212         正規表現の形式に誤りのあった場合、->error_m、->error_sを通じて
213         $@を取得できます。
214
215   インスタンス変数
216       もしJcodeオブジェクトのインスタンス変数にアクセスしたいなら、直接それら
217       にアクセスするのではなく、アクセスメソッドを利用しましょう(これぞOOP
218       です)。
219
220       参考までに、Jcodeは(一般的な方法である)ハッシュリファレンスの代わりに、
221       配列リファレンスを使うことで、スピードを最適化しています(実際のところ、
222       アクセスメソッドを使う限りこのことを知る必要はありません; もう一度
223       いいますが、これはOOPなのです)。
224
225       Perl 5.8.1以降では、ハッシュリファレンスを使うように変更されました。
226       これにより、Jcodeの拡張はものすごく簡単になります。
227
228       $j->r_str
229         EUC文字列へのリファレンス。
230
231         Perl
232         5.8.1以降ではUTF-8フラグの立ったUTF-8文字列へのリファレンスです。
233
234       $j->icode
235         直近の操作における入力文字コード。
236
237       $j->nmatch
238         マッチした数($j->tr等を使ったとき)。
239

サブルーチン

241       ($code, [$nmatch]) = getcode($str)
242         $strの文字コードを返します。返るコードは以下の通りです。
243
244          ascii   Ascii (日本語コードを含まない)
245          binary  Binary (テキストファイルではない)
246          euc     EUC-JP
247          sjis    SHIFT_JIS
248          jis     JIS (ISO-2022-JP)
249          ucs2    UCS2 (Raw Unicode)
250          utf8    UTF8
251
252         スカラーコンテキストの代わりに配列コンテキストを使うと、何文字分の
253         コードが見つかったのかも返します。上の方で述べたように、$strは\$str
254         でも構いません。
255
256         jcode.pl 利用者の方へ: この関数はjcode::getcode()と100%上位互換が
257         あります。――まあ、ほぼ100%;
258
259          * 戻り値が配列のとき、その順番は逆となります;
260            jcode::getcode()は$nmatchを最初に返します。
261
262          * jcode::getcode()は、EUC文字とSJIS文字の数が等しいとき、'undef'を
263            返します。 Jcode::getcode()はEUCを返します。これはJcode.pmには
264            中間がないためです。
265
266       Jcode::convert($str, [$ocode, $icode, $opt])
267         $strを$ocodeで指定した文字コードに変換します。$icodeも指定すると、
268         入力文字列をgetcode()でチェックする代わりに、$icodeと仮定します。
269         上の方で述べたように、$strは\$strでも構いません。
270
271         jcode.pl 利用者の方へ: この関数はjcode::convert()と100%上位互換が
272         あります!
273

バグ

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

謝辞

279       このパッケージは、動機、デザインそしてコードの多くの点で、 歌代 和正
280       <utashiro@iij.ad.jp>氏のPerl4ライブラリjcode.plに負っています。
281
282       大崎 博基 <ohzaki@iod.ricoh.co.jp>氏は、開発の非常に初期の段階から
283       正規表現を磨きあげる手助けをしてくれました。
284
285       makamaka@donzoko.net の JEncode には、JcodeとEncodeをどう融合させれば
286       いいか大変大きな啓示を受けました。また、本日本語マニュアルも寄贈して
287       いただきました。
288
289       そしてJcode ML <jcode5@ring.gr.jp>の皆さん。この方達なしには、
290       ここまで完成しなかったことでしょう。
291

参考

293       Encode
294
295       <http://www.iana.org/assignments/character-sets>
296

著作権

298       Copyright 1999-2005 Dan Kogai <dankogai@dan.co.jp>
299
300       This library is free software; you can redistribute it and/or modify it
301       under the same terms as Perl itself.
302
303
304
305perl v5.32.1                      2021-01-27                 Jcode::Nihongo(3)
Impressum