この標準情報(TR)は,日本規格協会 情報技術標準化研究センター(INSTAC)に設立された高速Web環境における標準化に関する調査研究委員会で,1998年度に行われた高速Web言語の調査研究をもとに,工業標準化の促進に関連して特に重要と判断される技術情報をまとめ,標準情報(TR)(タイプU)として公表するものである。
この標準情報(TR)は,日本語文字を含むXML文書に関しての明確化を行って, [TR X 0008]を補足する。
備考 この標準情報(TR)では,[JIS X 0208]及び[JIS X 0212]の図形文字を,平仮名,片仮名,ラテン文字などの非漢字も含めて"漢字"と呼ぶ。これらの漢字と [JIS X 0201]の片仮名用図形文字,円記号,オーバラインとを合わせて"日本語文字"と呼ぶ。
日本語文字を含むXML文書の交換性を高めるため,この標準情報(TR)は文字符号化スキームについての規定を行う。情報交換用ファイルで使用する文字符号化スキーム,各種のプロトコル(SMTP, HTTP/1.1など)で使用する文字符号化スキームは, それぞれ別に規定する。文字符号化スキームから[JIS X 0221]及び[Unicode 2.0]への変換に用いられている変換表を列挙し,符号化宣言及びMIMEヘッダで指定する名称を個々の変換表に与える。
備考 この標準情報(TR)では,"符号化文字集合"という語を,[IETF RFC 2130]で定義されている"Coded Character Set"と同じ意味で用い,"文字符号化スキーム"という語を,同じく[IETF RFC 2130]で定義されている"Character Encoding Scheme"と同じ意味で用いる。
参考 交換性が保証されないことを了解した上で,これらの規定を無視するのは利用者の自由である。
この標準情報(TR)にある規定の一部は,IETF RFC及びW3C勧告にある規定を日本語文字に当てはめて分かりやすく言い直したものであって,独自の規定ではない。
参考 例えば,[TR X 0008]は"[Unicode]の6.8節で定義される互換性文字は使用を避けることが望ましい。"と規定している。[JIS X 0201]の片仮名用図形文字は,この互換性文字にあたるため,この標準情報(TR)では[JIS X 0201]の片仮名用図形文字を避けることが望ましいと規定している。
独自の規定ではなく,[TR X 0008]並びにその他のIETF RFC及びW3C勧告にある規定を日本語文字に当てはめて言い直した規定は,参考又は解説において元の規定を示す。
次に示す規格などは, この標準情報(TR)の文中での引用によって, この標準情報 (TR) の規定の一部となる。JISについては最新版を適用する。RFCが他のRFCによって置き換えられた場合は,新しいRFCを適用する。
参考 1 W3C (Worlde Wide Web Consortium), Extensible Markup Language (XML) 1.0, Recommendation, http://www.w3.org/TR/REC-xml, 1998が[TR X 0008]に一致している。
参考 2 ISO/IEC 10646-1993(E), Information technology — Universal Multiple-Octet Coded Character Set (UCS) — Part 1: Architecture and Basic Multilingual Plane が[JIS X 0221]に対応している。
[JIS X 0208]及び[JIS X 0212]の図形文字を,平仮名,片仮名,ラテン文字などの非漢字も含めて漢字と呼ぶ。漢字と[JIS X 0201]の片仮名用図形文字,円記号,オーバラインとを合わせて日本語文字と呼ぶ。
符号化文字集合とは,文字の集合から整数の集合への写像とする。
参考 1 この標準情報(TR)でいう符号化文字集合は,[IETF RFC 2277]及び[IETF RFC 2130]でいうCoded Character Setと等しい。
参考 2 [JIS X 0208]でいう符号化文字集合とは,文字とビット組合わせとの対応関係であるので,ここでの定義とは異なることに注意されたい。
文字符号化スキームとは,符号化文字集合(一つ又は複数)から,オクテット列集合への写像とする。
参考 1 文字符号化スキームは,[IETF RFC 2277] 及び[IETF RFC 2130]でいうCharacter Encoding Schemeと等しい。
参考 2 [TR X 0008]でいう符号化及び符号化方式は,この文字符号化スキームに当たる。
charsetとは,オクテット列を文字列へ変換する方法とする。
参考 1 この定義は,[IETF RFC 2130], [IETF RFC 2277]及び[IETF RFC 2278]にあるものと等しい。
参考 2 インタネット上で使用するcharsetとして登録されたもの一覧は, [IANA]にある。
XML文書を構成する文書実体,外部解析対象実体,外部DTDサブセット,及び外部パラメタ実体をXML文書構成単位と呼ぶ。
参考 XML文書構成単位は,それぞれファイルに格納されるか,何らかのプロトコルによってMIMEエンティティとして配布されることが多い。
[JIS X 0201]は, 使用を避けることが望ましい。
参考 [ISO/IEC 646]は,国又は適用業務に応じた版を作成することを認めており,JIS X 0201はその一つである。US-ASCIIと完全に同一でない限り,[ISO/IEC 646]の版はインタネットでは使用しないことを[IETF RFC 2046]は求めている。
[JIS X 0208]:1978(第1版)を使用することはエラーとする。結果は定義されない。
参考 [JIS X 0208]:1978は,[TR X 0008]の符号化文字集合である[Unicode 2.0]の基になった規格に含まれてなく,[Unicode 2.0]との対応関係は明確ではない。
[JIS X 0208]に規定されている数字・ラテン文字・特殊文字のうち[JIS X 0201]でも規定されているもの,及び[JIS X 0201]の片仮名用図形文字は,その使用を避けることが望ましい。
参考 1 [TR X 0008]は,[Unicode 2.0]の互換性文字の使用を避けることを薦めている。
参考 2 XMLでは,文字参照を用いてこれらの文字を参照することができる。
この標準情報(TR)は,UTF-16の利用を推奨する( "5.2 UTF-8"で説明するとおりUTF-8も推奨する。)。
参考 1 UTF-16は,[JIS X 0221]及び[Unicode 2.0]の最初の17面にあるすべての文字を表現できる文字符号化スキームである。UTF-16は, [JIS X 0221]の原規格であるISO/IEC 10646の追補1及び [Unicode 2.0]で規定されている。[I-D: UTF-16]にも UTF-16についての説明がある。
参考 2 [TR X 0008]では,XMLプロセサにUTF-16(及び "5.2 UTF-8"で説明するUTF-8)の実装を義務付けている。
UTF-16であることを示すcharset名は,utf-16とする。
参考 1 [TR X 0008], [I-D: UTF-16]又は [IETF RFC 2376]が改訂されれば,utf-16be及びutf-16leを追加する可能性がある。
参考 2 [I-D: UTF-16]では, utf-16be及びutf-16leは, それぞれビッグエンディアン及びリトルエンディアンのUTF-16を表す。
この標準情報(TR)は,UTF-8の利用を推奨する("5.1 UTF-16"で説明したとおり UTF-16も推奨する。)。
参考 1 UTF-8は[JIS X 0221]及び[Unicode 2.0]のすべての面の文字を表現できる文字符号化スキームである。UTF-8は,[JIS X 0221]の原規格であるISO/IEC 10646の追補2及び[Unicode 2.0]の両方で規定されている。[IETF RFC 2279]にも UTF-8についての説明がある。
参考 2 [TR X 0008]では,XMLプロセサにUTF-8の実装を義務付けている。
UTF-8であることを示すcharset名は, utf-8とする。
参考 charset名utf-8は[IANA]に登録されている。
この標準情報(TR)及び[TR X 0008]では,日本国内で広く利用されているcharsetであるシフトJISを,[JIS X 0221]及び [Unicode 2.0]にある文字の一部(日本語文字と[US-ASCII]の文字)を表現する文字符号化スキームとして扱う。この標準情報(TR)の規定では, シフトJISを推奨しない。
参考 この標準情報(TR)でいう日本語文字は, [JIS X 0201]の片仮名用図形文字,円記号,オーバラインを含むことに注意。
この標準情報(TR)では,シフトJISから[JIS X 0221]及び [Unicode 2.0]への代表的な四つの変換表を取り上げ,これらに x-sjis-unicode-0.9, x-sjis-jisx0221-1995, x-sjis-cp932, x-sjis-jdk1.1.7という名前を与える。これらの変換表は相互に異なる。
参考 実際に用いられている変換表は他にも存在する。
x-sjis-unicode-0.9は,シフトJISの変換表としてUnicode Consortiumから公開されているもの(バージョンは0.9)とする。x-sjis-jisx0221-1995は, [JIS X 0208]の附属書1にあるシフト符号化表現の規定に従って [JIS X 0221]の附属書3にある変換表から生成した変換表とする。 x-sjis-cp932は,Microsoft社のCP932のための変換表としてUnicode Consortiumから公開されているものとする。x-sjis-jdk1.1.7は,JDK 1.1.7がエンコーディング名SJISのための変換表として用いている変換表とする。
参考 1 Unicode Consortiumの変換表は, ftp://ftp.unicode.org/Public/MAPPINGS/にある。
参考 2 ここで取り上げた変換表はいずれも用いられる可能性があり,他の変換表が用いられる可能性もあるので,シフトJISでは交換性を保証できない。
参考 3 一般に,シフトJISは[US-ASCII]ではなく[JIS X 0201]を用いていると見なされている。x-sjis-jdk1.1.7を除いて,ここで取り上げた変換表も同様である。したがって,[IETF RFC 2046]に従えば,シフトJISをインタネットで使用すべきではない。
参考 4 CP932は[JIS X 0201]を用いると定義されているが,0x5CをU+005C(REVERSE SOLIDUS)に変換している。
参考 5 CP932は, 日本語文字以外に, NEC特殊文字, NEC選定IBM拡張文字, IBM拡張文字, ユーザ外字を含んでいる。
この標準情報(TR)及び[TR X 0008]では,国内で広く利用されている charsetである日本語EUC(圧縮形式)[UNIXインターナショナル]を,[JIS X 0221]及び[Unicode 2.0]にある文字の一部(日本語文字と[US-ASCII]の文字)を表現する文字符号化スキームとして扱う。この標準情報(TR)の規定では, 日本語EUC(圧縮形式)を推奨しない。
この標準情報(TR)では,日本語EUC(圧縮形式)から[JIS X 0221]及び[Unicode 2.0]への代表的な五つの変換表を取り上げ,これらにx-eucjp-unicode-0.9, x-eucjp-jisx0221-1995, x-eucjp-open-19970715-ms, x-eucjp-open-19970715-0201, x-eucjp-open-19970715-ascii という名前を与える。これらの変換表は相互に異なる。
x-eucjp-unicode-0.9は,[JIS X 0208]から[JIS X 0221]及び[Unicode 2.0]への変換表としてUnicode Consortiumが公開しているものから生成した変換表を指す。 x-eucjp-jisx0221-1995は,[JIS X 0221]の附属書3にある変換表から生成した変換表を指す。x-eucjp-open-19970715-ms, x-eucjp-open-19970715-0201, x-eucjp-open-19970715-asciiは,オープングループ日本ベンダ協議会が定義した変換表であり,[TOG/JVC CDE/Motif 技術検討WG]の1997年7月15日版の添付資料においてeucJP-ms, eucJP-0201, eucJP-asciiと名付けられた変換表を指す。
参考 1 ここで取り上げた変換表はいずれも用いられる可能性があり,他の変換表が用いられる可能性もあるので,日本語EUCでは交換性を保証できない。
参考 2 x-eucjp-open-19970715-ms, x-eucjp-open-19970715-0201,x-eucjp-open-19970715-asciiは, 日本語文字以外に, NEC特殊文字, NEC選定IBM拡張文字, IBM拡張文字, ユーザ外字を含んでいる。
この標準情報(TR)及び[TR X 0008]では,日本国内での通信に広く利用されているcharsetであるISO-2022-JP[IETF RFC 1468]を, [JIS X 0221]及び[Unicode 2.0]にある文字の一部(日本語文字とUS-ASCII[US-ASCII]の文字)を表現する文字符号化スキームとして扱う。この標準情報(TR)の規定では, ISO-2022-JPを推奨しない。
この標準情報(TR)では,ISO-2022-JPから[JIS X 0221]及び[Unicode 2.0]への変換を,いったんシフトJIS又は日本語EUCを経由した変換によって定義する。すなわち,ISO-2022-JPからシフトJIS又は日本語EUCにいったん変換し,その後に"5.3 シフトJIS"又は"5.4 日本語EUC(圧縮形式)" に示した変換のいずれかを適用する。したがって,シフトJIS又は日本語EUCからの個々の変換表に対して,ISO-2022-JPからの変換表が存在する。
参考 1 ISO-2022-JPは,電子メールなどの通信に利用することを目的として規定されたcharsetである。そのため,ISO-2022-JP形式の情報は,シフト JIS又は日本語EUCの情報が,通信のために一時的に変換されたものと見なすことができる。したがって,シフトJIS又は日本語EUCにいったん戻してから変換するのが妥当であると考えられる。
参考 2 いったんシフトJIS又は日本語EUCを経由するからといっても, [IETF RFC 1468]が許していない文字が使用できるわけではない。たとえば,x-sjis-cp932は, NEC特殊文字, NEC選定IBM拡張文字, IBM拡張文字, ユーザ外字を表現できるが,x-iso2022jp-cp932がそれらの文字を表現できるわけでははない。
等しいものを除くと変換表は全部で五つになる。この標準情報(TR)ではこれらに x-iso2022jp-unicode-0.9, x-iso2022jp-jisx0221-1995, x-iso2022jp-cp932, x-iso2022jp-jdk1.1.7, x-iso2022jp-19970715-asciiという名前を与える。これらの変換表は相互に異なる。
シフトJIS又は日本語EUCからの変換表 | ISO-2022-JPからの変換表 | |
---|---|---|
シフトJIS | x-sjis-jdk1.1.7 | x-iso2022jp-jdk1.1.7 |
x-sjis-unicode-0.9 | x-iso2022jp-unicode-0.9 | |
x-sjis-jisx0221-1995 | x-iso2022jp-jisx0221-1995 | |
x-sjis-cp932 | x-iso2022jp-cp932 | |
日本語EUC | x-eucjp-open-19970715-ms | x-iso2022jp-cp932 |
x-eucjp-open-19970715-0201 | x-iso2022jp-jisx0221-1995 | |
x-eucjp-open-19970715-ascii | x-iso2022jp-19970715-ascii |
ISO-2022-JPで表現されたXML文書構成単位において,符号化宣言が終了する以前に,ビット組合わせ1Bで始まる3バイトの列を使用することはエラーとする。結果は定義されない。
参考 1 [TR X 0008]では,XMLプロセサが処理できない文字符号化スキームはエラーとしている。符号化宣言が終了する以前に,ビット組合わせ1Bが現れた場合は処理できないことが多い。
参考 2 結果を定義しないエラーとしているのは,既存のコード変換ライブラリを使って作成されたXMLプロセサを考慮したことによる。致命的エラーと規定して,通常の処理を中断することを義務付けた場合は,これらのXMLプロセサが適合しなくなる可能性がある。
参考 3 ここで取り上げた変換表はいずれも用いられる可能性があり,他の変換表が用いられる可能性もあるので,ISO-2022-JP では交換性を保証できない。
"5. 文字符号化スキームに関する規定"で説明した変換表は,互いに異なるcharsetとして扱う。それらの一覧を表6.1に示す。
Unicode | utf-16 |
utf-8 | |
シフトJIS | x-sjis-unicode-0.9 |
x-sjis-jisx0221-1995 | |
x-sjis-cp932 | |
x-sjis-jdk1.1.7 | |
日本語EUC(圧縮形式) | x-eucjp-unicode-0.9 |
x-eucjp-jisx0221-1995 | |
x-eucjp-open-19970715-ms | |
x-eucjp-open-19970715-0201 | |
x-eucjp-open-19970715-ascii | |
ISO-2022-JP | x-iso2022jp-unicode-0.9 |
x-iso2022jp-jisx0221-1995 | |
x-iso2022jp-cp932 | |
x-iso2022jp-jdk1.1.7 | |
x-iso2022jp-19970715-ascii |
参考 この標準情報(TR)がこれらのcharset名すべてを推奨しているわけではない。推奨しているのはutf-16及びutf-8だけである。
メディアタイプtext/xml又はapplication/xmlのcharsetパラメタ及び符号化宣言でcharsetを指定するときは,これらの名前を使用する。
参考 charsetパラメタは, 値としてcharset名を指定するためのパラメタである。メディアタイプtext/xmlのcharsetパラメタでcharset名utf-8を指定した例を次に示す。charsetパラメタの値がcharset名であり, charsetパラメタそのものはcharset 名ではないことに注意。
Content-Type: text/xml; charset=utf-8 |
参考 メディアタイプtext/xml又はapplication/xmlのcharsetパラメタの値としてcharset名を指定するという規定は[IETF RFC 2376]にあり,符号化宣言でcharset名を指定するという規定は[TR X 0008]にある。
charset名では大文字及び小文字のどちらを使用してもかまわない。
参考 1 charset名では大文字と小文字とを区別しないという規定は,[IANA]にある。
参考 2 [IANA]に登録されているcharset名Shift_JIS, EUC-JP, ISO-2022-JPが,この標準情報(TR)で説明したどの変換表に対応するかは不明だが,交換性が保証されないことを了解した上で,これらのcharset名を使用するのは利用者の自由である。
通信路の途中で文字符号化スキームを変換する場合は,変換後の文字符号化スキームを表すcharset名を,text/xml又はapplication/xmlのcharsetパラメタとして指定する。XML文書構成単位の中の符号化宣言を書き直す必要はない。
参考 charsetパラメタがBOM及び符号化宣言より優先することは, [IETF RFC 2376]に明記されている。
Webクライアント,メーラ,ニュースリーダなどが,受信したXML文書構成単位をファイルに格納するときは,符号化宣言で charset名を指定するか,先頭にBOMを付ける。ただし,UTF-8の場合だけは省略できる。格納するときに, 文字符号化スキームの変換を行ってもよい。
参考 この規定は, [IETF RFC 2376]にある。
情報交換用ファイルにXML文書構成単位を格納するときの文字符号化スキームとしては,UTF-16又はUTF-8のいずれかを使用する。
参考 1 シフトJIS及び日本語EUC(圧縮形式)も許容する予定であったが, [JIS X 0221]及び [Unicode 2.0]への変換表を一つに決定できないため, 現在はそれを見合わせている。変換表を一意に確定させてこれらを許容する可能性は残されている。この標準情報(TR)で導入した複数の名前をそのまま許容する可能性も残されている。
参考 2 交換性が保証されないことを了解した上で,シフトJIS又は日本語EUC(圧縮形式)を使用するのは利用者の自由である。
情報交換用ファイルに格納するXML文書構成単位については,BOM又は符号化宣言を付ける。ただし,UTF-8の場合だけはこれらを省略してもよい。
参考 1 BOM又は符号化宣言を付けるという規定は,[TR X 0008]の附属書Fに示されている。
参考 2 UTF-16の場合は, BOMによって文字符号化スキームを明示するのでcharset名は必要ない。
文字符号化スキームについての外部情報がない場合, XMLプロセサはBOM及び符号化宣言を見て文字符号化スキームを判定する。この自動検出は,[TR X 0008]の附属書Fに示されている。
参考 XML文書構成単位を表現するオクテット列がアプリケーションの入出力となる場合も,情報交換用ファイルについての規定を適用することが望ましい。
サーバがXML文書構成単位を配送するときの文字符号化スキームとしては,UTF-16又はUTF-8のいずれかを使用する。
参考 1 ISO-2022-JP及び日本語EUC(圧縮形式)も許容する予定であったが, [JIS X 0221]及び [Unicode 2.0]への変換表を一つに決定できないため, 現在はそれを見合わせている。変換表を一意に確定させてこれらを許容する可能性は残されている。この標準情報(TR)で導入した複数の名前をそのまま許容する可能性も残されている。
参考 2 交換性が保証されないことを了解した上で, ISO-2022-JP及び日本語EUC(圧縮形式)を使用するのは利用者の自由である。
HTTP 1.1([IETF RFC 2068])による配送では,メディアタイプtext/xml又はapplication/xmlを用い,charsetパラメタを正しく付ける。メディアタイプがapplication/xmlであり,XML文書中の BOM又は符号化宣言で文字符号化スキームを明示してある場合だけは, charsetパラメタを省略できる。
参考 1 [IETF RFC 2376]はcharsetパラメタを強く推奨している。text/xmlの場合は,charsetパラメタとして指定されたcharset名がBOM及び符号化宣言より優先する。省略した場合はUS-ASCIIであると見なされる。
参考 2 US-ASCIIで符号化されたXML文書の場合は,メディアタイプが text/xmlの場合でもcharsetパラメタを省略できるが,US-ASCIIの文書は日本語文字を含んでいないので,この標準情報(TR)の適用範囲外である。
参考 3 サーバの設定によって,XML文書構成単位を格納したファイルと,メディアタイプ(text/xml又はapplication/xml)及び文字符号化スキームを表すcharset名とを関係付けなければならない。正しく設定されていれば,サーバがXML文書構成単位を配布するとき,設定されたメディアタイプがcontent-type フィールドの値として利用され,設定されたcharset名がメディアタイプのcharset パラメタの値として利用される。
クライアントは,このcharsetパラメタに従って文字符号化スキームを判定する。 text/xmlのcharsetパラメタが省略された場合はUS-ASCIIであると判定する。 application/xmlのcharsetパラメタが省略された場合は情報交換用ファイルと同様に自動検出する。
参考 この規定は[IETF RFC 2376]にある。
XML文書構成単位をメールの本文として送信する場合は,文字符号化スキームとしてUTF-16又はUTF-8のいずれかを使用する。
参考 1 ISO-2022-JPも許容する予定であったが, [JIS X 0221]及び [Unicode 2.0]への変換表を一つに決定できないため, 現在はそれを見合わせている。変換表を一意に確定させてこれらを許容する可能性は残されている。この標準情報(TR)で導入した複数の名前をそのまま許容する可能性も残されている。
参考 2 交換性が保証されないことを了解した上で, ISO-2022-JPを使用するのは利用者の自由である。日本語EUC(圧縮形式)を許容することを予定していなかったのは,これまでメール及びニュースに日本語EUCが使われた実績がほとんどないためである。
UTF-16の場合は,メディアタイプapplication/xml を用い,それ以外の場合はメディアタイプをtext/xmlを用いる。どの場合も, charsetパラメタを必ず付ける。
もし必要なら,Base64などのcontent transfer encodingを適用する。
参考 content transfer encodingについては[IETF RFC 2045]に詳しく規定されている。
XML文書(又はその一部)が日本語で書かれていることを示すには,xml:lang属性を用いる。
参考 xml:lang属性は[TR X 0008]に規定されている。
xml属性の値には, 日本語を表す言語識別コード(例えば ja )を指定する。属性値には,大文字及び小文字のどちらを使用してもよい。
参考 言語識別コードは[IETF RFC 1766]に詳細に規定されている。