Network Working Group
Request for Comments: 1468

村井 純 (慶應義塾大学)
M. Crispin (Panda Programming)
E. van der Poel

1993年6月

Japanese Character Encoding for Internet Messages
(インターネットメッセージの日本語文字エンコード法)

翻訳について

これは、 RFC 1468, "Japanese Character Encoding for Internet Messages" を独自に翻訳した物です。 この翻訳を利用する際は、 翻訳者の理解不足による誤訳の可能性が十分にあることを念頭に入れて下さい。 (誤訳を発見された場合、翻訳者まで連絡を頂ければ幸いです。)

この翻訳は "現状有姿 (AS IS)" で提供され、 明示的であるか黙示的であるかを問わずいかなる保証も行われないものとします。

この文書の位置付け

この文書はインターネットコミュニティへ情報を提供するものであり、 インターネットの標準を規定するものではない。 この文書の配布に制限はない。 (訳註: この日本語訳に関しても同様の扱いとする。)

序説

この文書では、 日本のネットワークにおける電子メール [RFC822] とネットワークニューズ [RFC1036] のエンコード法について解説する。 これは当初JUNETにおいて規定・使用されていたものである。 [JUNET] 現在、このエンコード法は日本のIPコミュニティにおいて広く使用されている。

このエンコード法に付された名称は "ISO-2022-JP" であり、 MIMEヘッダの "charset" パラメタフィールドにおいて使用されることを意図している。 ([MIME1]、 [MIME2]を参照。)

解説

テキストはASCII [ASCII] から開始し、 エスケープシーケンスによって日本語文字に遷移する。 たとえば、ESC $ B (3バイト。16進値: 1B 24 42) というエスケープシーケンス はこの後に出てくるバイト列が(それぞれ2バイトでエンコードされている) 日本語文字であることを示す。 ASCIIに戻すためには ESC ( B というエスケープシーケンスが使用される。

以下はエスケープシーケンスと ISO-2022-JP で使用される文字セットの対応表である。 ISOREG 番号はISOの登録番号である。[ISOREG]

エスケープシーケンス 文字セット ISOREG番号
ESC ( B ASCII 6
ESC ( J JIS X 0201-1976 ("ローマ"字セット) 14
ESC $ @ JIS X 0208-1978 42
ESC $ B JIS X 0208-1983 87

JIS X 0208は1987年3月1日の名称改定以前はJIS C 6226 と呼ばれていたことに留意すること。 同様に、JIS C 6220はJIS X 0201に変更されている。

JIS X 0201 [JISX0201] の"ローマ"文字セットは 逆スラッシュ(\) と チルダ (~) を除き、ASCII と同一のものである。 逆スラッシュは円記号(¥)で、 チルダはオーバーライン( ̄)で置き換えられている。 このセットはISO 646 [ISO646] の日本用に変更したものである。

JIS X 0208 [JISX0208] 文字セットは漢字、平仮名、片仮名、そして他の記号や文字から成る。 それぞれの文字の大きさは2バイトである。

JIS日本語文字セットに関する詳細は [JISX0201] と [JISX0208] を、 エスケープシーケンスに関しては [ISO2022] と [ISOREG] を参照せよ。

ある行に JIX X 0208 文字が存在する場合、 行末(すなわち、CRLF)の前に ASCII または JIX X 0201 セットの "ローマ字"セットに切替えなければならない。 これは次の行はその直前の行末の前に切り替わった文字セットから 開始することを意味する。

追加して、テキストはASCIIで終了しなければならない。

他の制限に関しては以下に述べる"正式の文法"で示されている。

正式の文法

ここで使用される表記法は RFC 822 [RFC822] で使用されているものと同一のものである。

* (アスタリスク) は以下の通りである:

l*m 何か

これはl個以上m個未満の何かをあらわす。 ここで、lmはそれぞれ0と無限大の既定値を取る。

message             = headers 1*( CRLF *single-byte-char *segment
                      single-byte-seq *single-byte-char )
                                        ; [MIME1] の "body-part" を参照。
                                        ; 注意: ASCIIで終了する必要がある。

headers             = <[RFC822] の "fields"、[MIME1] の "body-part" を参照せよ>

segment             = single-byte-segment / double-byte-segment

single-byte-segment = single-byte-seq 1*single-byte-char

double-byte-segment = double-byte-seq 1*( one-of-94 one-of-94 )

single-byte-seq     = ESC "(" ( "B" / "J" )

double-byte-seq     = ESC "$" ( "@" / "B" )

CRLF                = CR LF

                                                 ; (   8進,     10進)

ESC                 = <ISO 2022 ESC, escape>     ; (    33,      27.)

SI                  = <ISO 2022 SI, shift-in>    ; (    17,      15.)

SO                  = <ISO 2022 SO, shift-out>   ; (    16,      14.)

CR                  = <ASCII CR, carriage return>; (    15,      13.)

LF                  = <ASCII LF, linefeed>       ; (    12,      10.)

one-of-94           = <any one of 94 values>     ; (41-176, 33.-126.)

7BIT                = <任意の7ビット値>          ; ( 0-177,  0.-127.)

single-byte-char    = <素の CR、素の LF を含み、CRLF を含まない、
                       ESC、SI、SO を含まない、任意の 7BIT>

MIMEに関する考察

JUNET文字エンコード法に付された名称は "ISO-2022-JP" である。 この名称は MIME メッセージにおいて以下のように使用されることを想定している:

Content-Type: text/plain; charset=iso-2022-jp

ISO-2022-JP でエンコードされたメッセージは、 既に7ビット形式になっている。 したがって、Content-Transfer-Encoding ヘッダを使用する必要は無い。 Base64またはQuoted-Printableエンコード法を適用した場合、 そのメッセージが現在のJUNETソフトウェアでは読めなくなることに 注意するべきである。

ISO-2022-JP はまた、MIME 第2部のヘッダにおいても使用することが出来る。 "B"エンコード法はISO-2022-JPテキストとともに使用されるべきである。

背景に関する情報

JUNETエンコード法は JUNET User's Guide (JUNET利用の手引 第1版) [JUNET] で解説されている。

このエンコード法は4月1日までに発表された ISO 2022 (詳細は [ISO2022] を参照せよ) の使用方法に基づいている。 しかしながら、この発表に対して一般に使用されているエスケープシーケンスは ISO-2022-JPメッセージには含まれない。

JIS X 0201 の カナセット (訳註: いわゆる "半角カナ" 文字セット) は ISO-2022-JP メッセージには使用されない。

過去、ESC ( H エスケープシーケンスがJUNETメッセージ中で使用されていた。 このエスケープシーケンスはスエーデン語文字セットとして公式に登録されている。 [ISOREG] したがって、それは ISO-2022-JP メッセージ中で使用するべきではない。

表示する際、 ESC ( BESC ( J、 または ESC $ @ESC $ B を区別しないシステムも存在する。 しかしながら、他のシステムへメッセージを中継する場合には、 どのような場合においてもエスケープシーケンスを変更してはならない。

利用者 (実装者ではない) は1行を80文字、 可能ならば75文字程度以内におさめるよう努めるべきである。 これは引用のため、各行頭に " >" を挿入できるようにするためである。 JIS X 0208 文字はそれぞれ2文字の幅を持ち (訳註: これは常に真ではない。 なぜならば、文字コードに文字幅は規定されていないからである。 この記述には、当時は ASCII文字:JIS X 0208 文字 = 1:2 の文字幅を持つ環境が最も一般的であった背景があると思われる。)、 エスケープシーケンスは幅を持たない。 JIS X 0208文字は2バイトを使用するため、 実装者は表示の際には改行で分断されないように注意するべきである。

JIS X 0208 規格は1990年に改定され、 文字コード表の最後に2文字が追加された。 ISO 2022では改訂後の文字セット使用を指示する追加のエスケープシーケンス が規定されている。 しかし、1990年に JIS X 0208 に追加された2文字を使用する場合でも、 ISO-2022-JP テキストにおいてはこの特別なエスケープシーケンスを 使用しないように提案する。

PCコードのような日本語文字エンコード法や、実装が入手可能なFTPサイト に関する詳細な情報は"Electronic Handling of Japanese Text" [JPN.INF] を参照せよ。

参考文献

謝辞

この文書を書くにあたって、多くの方々の協力を頂いた。 著者らは特に Akira Kato, Masahiro Sekiguchi そして Ken'ichi Handa に感謝したい。

セキュリティに関する考察

この文書において、セキュリティ問題に関する議論は行われていない。

著者のアドレス

Jun Murai (村井 純)
Keio University (慶應義塾大学)
5322 Endo, Fujisawa
Kanagawa 252 Japan
Fax: +81 466 49 1101
EMail: [email protected]
Mark Crispin
Panda Programming
6158 Lariat Loop NE
Bainbridge Island, WA 98110-2098
USA
Phone: +1 206 842 2385
EMail: [email protected]
Erik M. van der Poel
A-105 Park Avenue
4-4-10 Ohta, Kisarazu
Chiba 292 Japan
Phone: +81 438 22 5836
Fax: +81 438 22 5837
EMail: [email protected]

Original: © 1993 Jun Murai, el al
Translation: © 2000 HIRATA Yasuyuki <[email protected]>, all rights reserved.