File: EncWords.pod

package info (click to toggle)
libmime-encwords-perl 1.014.3-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 252 kB
  • sloc: perl: 868; makefile: 2
file content (365 lines) | stat: -rw-r--r-- 13,191 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
=encoding utf-8

=head1 NAME

MIME::EncWords~[ja] - RFC 2047 encoded-word 関連 (改良版)

=head1 SYNOPSIS

I<L<MIME::EncWords> は、RFC 2047 (旧 RFC 1522)
の仕様により適合することをめざした L<MIME::Words> の別実装です。
加えて、いくらかの改良がなされています。
以下の梗概と説明は、もとの MIME::Words から採ったものに、
改良点の説明 (B<**>) および変更点の説明と明確化 (B<*>)
を加えたものです。>

読み進める前に、L<MIME::Tools> を見るべきだ。そうして、
あなたの成し遂げようとしていることのどこでこのモジュールを使うのかを、
理解してほしい。
いますぐ。待ってるから。

いいかな。はじめるよ...

    use MIME::EncWords qw(:all);

    ### 文字列を、キャラクタセットは無視してデコードした文字列にする:
    $decoded = decode_mimewords(
          'To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@dkuug.dk>',
          );

    ### 文字列を、デコードされた [DATA,CHARSET] の対の配列にする:
    @decoded = decode_mimewords(
          'To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@dkuug.dk>',
          );

    ### 単一の「安全でない語」をエンコードする:
    $encoded = encode_mimeword("\xABFran\xE7ois\xBB");

    ### 文字列を、「安全でない語」を探しながらエンコードする:
    $encoded = encode_mimewords("Me and \xABFran\xE7ois\xBB in town");

=head1 DESCRIPTION

合衆国の諸君。このモジュールでいったい何をやらかそうというのか、
わからないかもしれないね。欧州、ロシア等の諸君なら、わかるだろう。C<(:-)>。

たとえば、これは有効な MIME ヘッダだ:

      From: =?US-ASCII?Q?Keith_Moore?= <moore@cs.utk.edu>
      To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@dkuug.dk>
      CC: =?ISO-8859-1?Q?Andr=E9_?= Pirard <PIRARD@vm1.ulg.ac.be>
      Subject: =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=
       =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?=
       =?US-ASCII?Q?.._cool!?=

これらのフィールドは、だいたいつぎのようにデコードできる:

      From: Keith Moore <moore@cs.utk.edu>
      To: Keld Jørn Simonsen <keld@dkuug.dk>
      CC: André  Pirard <PIRARD@vm1.ulg.ac.be>
      Subject: If you can read this you understand the example... cool!

B<追補>: 合衆国、欧州の諸君。
このモジュールでいったいなにをやらかそうというのか、
わからないかもしれないね。東アジア等の諸君なら、わかるだろう。
C<(^_^)>.

たとえば、これは有効な MIME ヘッダだ:

      Subject: =?EUC-KR?B?sNTAuLinKGxhemluZXNzKSwgwvzB9ri7seIoaW1w?=
       =?EUC-KR?B?YXRpZW5jZSksILGzuLgoaHVicmlzKQ==?=

これらのフィールドは、だいたいつぎのようにデコードできる:

      Subject: 게으름(laziness), 참지말기(impatience), 교만(hubris)

=head1 PUBLIC INTERFACE

=over 4


=cut

=item decode_mimewords ENCODED, [OPTS...]

I<関数>。
文字列から RFC 2047 スタイルの "Q" エンコーディング
(quoted-printable の一種) や "B" エンコーディング (base64)
を探し、それをデコードする。

B<配列コンテクストでは>、文字列 ENCODED をデコードした
C<[DATA, CHARSET]> の対に分割し、そのリストを返す。
エンコードされていなかったデータは 1 要素の配列
C<[DATA]> で返す (CHARSET は実質的に C<undef>)。

    $enc = '=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@dkuug.dk>';
    foreach (decode_mimewords($enc)) {
        print "", ($_[1] || 'US-ASCII'), ": ", $_[0], "\n";
    }

B<**>
ただし、隣り合う「encoded-word」を、キャラクタセットがおなじなら連結する。
これは、マルチバイト列を安全に扱えるようにするためである。

B<**>
RFC2231 第 5 節で定義している言語情報があれば、第 3 の要素として追加する。

B<*>
エンコードされていなかったデータの両端の空白文字は取り去らない。
これは、L<MIME::Words> との互換性を保つためである。

B<スカラコンテクストでは>、上記のリストの DATA 要素をすべて連結し、
それを返す。I<注意: 情報の損失がある>ので、
望んだ結果が得られI<ない>かもしれない。
だが、文字列 ENCODED
のすべての文字のキャラクタセットが同一だとわかっているのなら、
これは役に立つこともある。
(これを使う前に、L<MIME::WordDecoder/unmime> を見てほしい。
これが望みのものかもしれない。)
B<**>
下記の "Charset" も参照。

構文エラーが発生すると、$@ にエラーの説明をセットするが、
解析はできるかぎり (ヘッダのデコードで得られたI<なにか>を返すために)
続行する。
エラーが見つからなければ、$@ は偽となる。

B<*>
「encoded-word」が壊れているときは、エンコードしたままのものを返す。
この場合、$@ をセットする。

ENCODED に引き続く引数は、ハッシュによるオプションの定義とみなす。
B<**>
Unicode/マルチバイト文字対応が有効になっていないとき
(L<MIME::Charset/USE_ENCODE> 参照) は、
以下のオプションはなんの効果も持たない。

=over 4

=item Charset
B<**>

スカラコンテクストで、DATA 要素をこの名前のキャラクタセットで変換する。
このオプションに特殊値 C<"_UNICODE_"> を指定すると、
返す値は Unicode 文字列となる。

B<Note>:
この仕様は、I<C<"_UNICODE_"> を指定したとき以外は>、
やはり情報の損失がある。

=item Detect7bit
B<**>

エンコードされていなかった部分の 7 ビットキャラクタセットを判別しようとする。
初期値は C<"YES">。


=cut

=item Mapping
B<**>

スカラコンテクストで、
キャラクタセットの名前に対して実際に使うマッピングを指定する。
C<"EXTENDED"> は拡張マッピングを使う。
C<"STANDARD"> は標準化されている厳密なマッピングを使う。
初期値は C<"EXTENDED">。

=back

=cut

=item encode_mimeword RAW, [ENCODING], [CHARSET]

I<関数>。
「安全でない」文字のある単一の「語」RAW をエンコードする。
「語」全体がエンコードされる。

    ### "«François»" をエンコードする:
    $encoded = encode_mimeword("\xABFran\xE7ois\xBB");

エンコーディング ENCODING を指定できる (C<"Q"> または C<"B">)。
初期値は C<"Q">。
B<**>
さらに、「特殊」な値も指定できる。
C<"S"> は C<"Q"> と C<"B"> のうち短くなるほうを選ぶ。

キャラクタセット CHARSET を指定できる。初期値は C<iso-8859-1>。

B<*>
C<"Q"> エンコーディングでは、空白を ``_'' でエスケープする。


=cut

=item encode_mimewords RAW, [OPTS]

I<関数>。
文字列 RAW から、「安全でない」文字の列を見つけてエンコードしようとする。

    ### 「安全でない語」のある文字列をエンコードする:
    $encoded = encode_mimewords("Me and \xABFran\xE7ois\xBB");

エンコードした文字列を返す。

B<**>
RAW は Unicode でもよい。ただし Unicode/マルチバイト対応が有効な場合
(L<MIME::Charset/USE_ENCODE> 参照)。
さらに RAW は、L</decode_mimewords>
が配列コンテクストで返すものへの参照でもよい。
後の場合は、"Charset" オプション (下記参照) が適宜上書きされる
(下の注も参照)。

B<Note>:
B<*>
RAW が配列への参照であるときは、
隣り合う「encoded-word」
(つまり、ASCII 以外のキャラクタセット要素のある要素)
を連結する。その上で、マルチバイト文字の文字境界を考慮しながら
(ただしこれは Unicode/マルチバイト対応が有効なときだけ)、分割する。
エンコードしないデータ部分は両端に空白文字が必要。
そうしなければ隣り合う「encoded-word」に併合されてしまう。

RAW に引き続く引数は、ハッシュによるオプションの定義とみなす:

=over 4

=item Charset

「安全でない」ものはこのキャラクタセットでエンコードする。
初期値は 'ISO-8859-1' (別名 "Latin-1")。

=item Detect7bit
B<**>

"Encoding" オプション (下記参照) が C<"a"> に指定してあって "Charset"
オプションが不明なら、
RAW 文字列の 7 ビットキャラクタセットを判別しようとする。
初期値は C<"YES">。
Unicode/マルチバイト文字対応が有効になっていないとき
(L<MIME::Charset/USE_ENCODE> 参照) は、
このオプションはなんの効果も持たない。

=item Encoding

使用するエンコーディング。C<"q"> または C<"b">。
B<**>
「特殊」な値も指定できる。C<"a"> は推奨されるエンコーディングを自動選択する
(キャラクタセットに別のものが推奨されるときはキャラクタセット変換も行う。
L<MIME::Charset~[ja]> 参照)。
C<"s"> は C<"q"> と C<"b"> のうち短くなるほうを選ぶ。
B<Note>:
B<*>
リリース 1.005 で、初期値が C<"q">
(MIME::Words での初期値) から C<"a"> に変わった。

=item Field

この文字列を使うメールフィールドの名前。
B<**>
ヘッダをエンコードする際には、最初の行でメールフィールド名の長さを考慮する。

=item Folding
B<**>

エンコードする行を「行折り」する文字の列。初期値は C<"\n">。
空文字列 C<""> を指定すると、行長 (下記 L</MaxLineLen> 参照)
を超える「encoded-word」を SPACE で分割するだけ。

B<Note>:
B<*>
RFC 5322 (旧 RFC 2822) には、インターネットのメッセージでは行を
CRLF (C<"\r\n">) で区切ると明記してあるが、
このモジュールでは後方互換性を保つために LF (C<"\n">) を初期値としてきた。
初期値を使っている場合、
エンコードしたヘッダをセッションへと放つ前に、
改行文字の変換が必要になることもある。

=item Mapping
B<**>

キャラクタセットの名前に対して実際に使うマッピングを指定する。
C<"EXTENDED"> は拡張マッピングを使う。
C<"STANDARD"> は標準化されている厳密なマッピングを使う。
初期値は C<"EXTENDED">。
Unicode/マルチバイト文字対応が有効になっていないとき
(L<MIME::Charset/USE_ENCODE> 参照) は、
このオプションはなんの効果も持たない。

=item MaxLineLen
B<**>

行の最大長 (改行を除く)。
初期値は 76。
負の値は行長無制限を意味する (リリース 1.012.3 以降)。

=item Minimal
B<**>

エンコードするテキストの中の自然な語分離子 (要するに空白文字)
に注意を払う。
C<"NO"> を指定すると、
このモジュールは空白文字を考慮せずにテキスト全体をエンコード
(エンコードが必要なら)
し、行長を超える「encoded-word」は単にその長さによって分割される。
初期値は C<"YES"> で、最小限の部分だけエンコードする。
C<"DISPNAME"> を指定すると、RFC5322 (旧 RFC2822、RFC822)
のアドレス仕様 (3.4節) で述べている特殊文字を含む部分もエンコードする。
これはアドレスフィールド中の display-name をエンコードする際に有用である。

B<Note>:
リリース 0.040 で、初期値が C<"YES"> に変わった。
MIME::Words との互換性を保つためである。
それ以前のリリースでは、このオプションは C<"NO"> 固定であった。

B<Note>:
C<"DISPNAME"> はリリース 1.012 で導入された。

=item Replacement
B<**>

L<MIME::Charset~[ja]/エラー処理> 参照。

=back

=cut

=back

=head2 設定ファイル
B<**>

L</decode_mimewords> ('Charset' オプションを除く) および
L</encode_mimewords> のオプション引数の組み込み初期値は、
設定ファイルで上書きできる。
F<MIME/Charset/Defaults.pm> と F<MIME/EncWords/Defaults.pm>。
詳細は F<MIME/EncWords/Defaults.pm.sample> を読んでほしい。

=head1 VERSION

C<$VERSION> 変数を参照してほしい。

このモジュールの開発版が
L<http://hatuka.nezumi.nu/repos/MIME-EncWords/>
にある。

=head1 SEE ALSO

L<MIME::Charset~[ja]>,
L<MIME::Tools>

=head1 AUTHORS

decode_mimewords() 関数の元の版は L<MIME::Words>
モジュールから引き継いだもので、著者は以下のとおり:
    Eryq (F<eryq@zeegee.com>), ZeeGee Software Inc (F<http://www.zeegee.com>).
    David F. Skoll (dfs@roaringpenguin.com) http://www.roaringpenguin.com

そのほかの部分は、次の者が書き直しあるいは加えた:
    Hatuka*nezumi - IKEDA Soji <hatuka(at)nezumi.nu>.

This program is free software; you can redistribute
it and/or modify it under the same terms as Perl itself.


=cut