標準情報(TR) TR X 0015:2002

XML日本語プロファイル 解説


1. 日本語XMLプロファイルの必要性

[JIS X 4159]は,符号化文字集合として[ISO/IEC 10646]及び[Unicode 3.1]を採用しており,これは日本語文字をすべて含む。文字符号化スキームとしてはUTF-8及びUTF-16を推奨し,これらの実装を義務付けている。既存の文字符号化スキームも, [Unicode 3.1]の文字だけを扱う限りオプションとしてすべて許容している。

しかし,[JIS X 4159]では,日本語文字の交換に広く使われてきた既存の文字符号化スキームはほとんど説明されていない。これらはオプションの一つとして許容されているに過ぎない。SMTP及びHTTPなどのプロトコル並びに情報交換用ファイルで,どの文字符号化スキームを用いるかについても,特に定められてはいない。

既存の文字符号化スキームと[ISO/IEC 10646]及び [Unicode 3.1]との対応も不明確である。相互に異なるいくつかの変換表が用いらており,複数のXMLプロセサが異なる結果を出力する場合がある。

これらの問題点を明らかにするため,この標準情報(TR)では文字符号化スキームについての明確化を行った。既存の文字符号化スキームを用いた場合の問題点を解決できたわけではないが,どのような問題点があるかは整理されている。

2. シフトJISからUnicodeへの変換表の相違点

シフトJISから[ISO/IEC 10646]及び[Unicode 3.1]への変換表の相違点は,大きく四つ存在する。

第1に, 0x5C及び0x7Eは,x-sjis-unicode-0.9及びx-sjis-jisx0221-1995ではそれぞれ円記号及びオーバラインに変換するが,x-sjis-cp932及びx-sjis-jdk1.1.7ではそれぞれバックスラッシュ及びチルドに変換する。

第2に,0x8160(WAVE DASH/波ダッシュ), 0x8161(DOUBLE VERTICAL LINE/双柱), 0x817C(MINUS SIGN/負符号,減算記号), 0x8191(CENT SIGN/セント記号), 0x8192(POUND SIGN/ポンド記号), 0x081CA(NOT SIGN/否定) は,x-sjis-cp932だけが他と異なる変換を行う。

第3に,0x815C(EM DASH/ダッシュ(全角))は,x-sjis-jisx0221-1995ではU+2014(EM DASH)に変換するが,他ではU+2015(HORIZONTAL BAR)に変換する。

第4に,x-sjis-cp932だけが NEC特殊文字,NEC選定IBM拡張文字,IBM拡張文字,ユーザ外字を含んでいる。

解説表2.1 シフトJISから[Unicode 3.1]への変換表の相違
シフトJISでのコード値 x-sjis-jdk1.1.7 x-sjis-unicode-0.9 x-sjis-jisx0221-1995 x-sjis-cp932
0x5C(HEN SIGN/円記号) 0x005C(REVERSE SOLIDUS) 0x00A5(YEN SIGN) 0x00A5(YEN SIGN) 0x005C(REVERSE SOLIDUS)
0x7E(OVERLINE/オーバライン) 0x007E(TILDE) 0x203E(OVERLINE) 0x203E(OVERLINE) 0x007E(TILDE)
0x815C(EM DASH/ダッシュ(全角)) 0x2015(HORIZONTAL BAR) 0x2015(HORIZONTAL BAR) 0x2014(EM DASH) 0x2015(HORIZONTAL BAR)
0x815F(REVERSE SOLIDUS/逆斜線) 0x005C(REVERSE SOLIDUS) 0x005C(REVERSE SOLIDUS) 0x005C(REVERSE SOLIDUS) 0xFF3C(FULLWIDTH REVERSE SOLIDUS)
0x8160(WAVE DASH/波ダッシュ) 0x301C(WAVE DASH) 0x301C(WAVE DASH) 0x301C(WAVE DASH) 0xFF5E(FULLWIDTH TILDE)
0x8161(DOUBLE VERTICAL LINE/双柱) 0x2016(DOUBLE VERTICAL LINE) 0x2016(DOUBLE VERTICAL LINE) 0x2016(DOUBLE VERTICAL LINE) 0x2225(PARALLEL TO)
0x817C(MINUS SIGN/負符号,減算記号) 0x2212(MINUS SIGN) 0x2212(MINUS SIGN) 0x2212(MINUS SIGN) 0xFF0D(FULLWIDTH HYPHEN-MINUS)
0x8191(CENT SIGN/セント記号) 0x00A2(CENT SIGN) 0x00A2(CENT SIGN) 0x00A2(CENT SIGN) 0xFFE0(FULLWIDTH CENT SIGN)
0x8192(POUND SIGN/ポンド記号) 0x00A3(POUND SIGN) 0x00A3(POUND SIGN) 0x00A3(POUND SIGN) 0xFFE1(FULLWIDTH POUND SIGN)
0x81CA(NOT SIGN/否定) 0x00AC(NOT SIGN) 0x00AC(NOT SIGN) 0x00AC(NOT SIGN) 0xFFE2(FULLWIDTH NOT SIGN)
13区,89-92区,115-119区の拡張文字 なし なし なし あり

3. 日本語EUCからUnicodeへの変換表の相違点

x-eucjp-unicode-0.9及びx-eucjp-jisx0221-1995は,[US-ASCII], [JIS X 0201]の片仮名用図形文字,[JIS X 0208],及び[JIS X 0212]において定義されている文字だけを表現する。オープングループ日本ベンダ協議会が定義した変換表[Unicodeとユーザ定義文字・ベンダ定義文字]は,これに加えて,IBM拡張文字(0x8FF3F3から0x8FF4FEの範囲),NEC特殊文字(0xADA1から0xADFCの範囲),ユーザ定義文字(0xF5A1から0xFEFEの範囲及び0x8FF5A1から0x8FFEFEの範囲に分散して配置される。)を表現する。

3.1 0x20から0x7Eの範囲([US-ASCII]又は[JIS X 0201])

0x20から0x7Eの範囲においては,x-eucjp-unicode-0.9, x-eucjp-jisx0221-1995, x-eucjp-open-19970715-ms, x-eucjp-open-19970715-asciiのいずれも,日本語EUCの定義どおり[US-ASCII]とみなして変換している。x-eucjp-open-19970715-0201だけが例外であり,[JIS X 0201]に従って次の変換を採用している。

解説表3.1 x-eucjp-open-19970715-0201の変換表
EUCでのコード値 変換先
0x5C(REVERSE SOLIDUS/逆斜線) U+00A5(YEN SIGN)
0x7E(TILDE/チルド) U+203E(OVERLINE)

3.2 0x8EA1から0x8EDFまでの範囲(片仮名用図形文字)

0x8EA1から0x8EDFの範囲には,[JIS X 0201]での片仮名用図形文字が配置されるが,すべての変換表で[ISO/IEC 10646]及び[Unicode 3.1]の互換性領域内のU+xFF61から U+xFF9Fの範囲に変換している。相違はない。

3.3 [JIS X 0208]及び[JIS X 0212]の文字に関する相違

[JIS X 0208]及び[JIS X 0212]で規定されている文字に関しては, x-eucjp-jisx0221-1995とx-eucjp-open-19970715-0201とはまったく等しい。

x-eucjp-unicode-0.9は,これらと0xA1BD(EM DASH/ダッシュ(全角))とが異なる。

x-eucjp-open-19970715-asciiでは, 0xA1B1(OVERLINE/オーバライン,論理否定記号), 0xA1C0(REVERSE SOLIDUS/逆斜線), 0xA1EF(YEN SIGN/円記号), 0x8FA2B7(TILDE/チルド)の四つの文字が異なる。

x-eucjp-open-19970715-msでは, 0xA1BD(EM DASH/ダッシュ(全角)), 0xA1C0(REVERSE SOLIDUS/逆斜線), 0xA1C1(WAVE DASH/波ダッシュ), 0xA1C2(DOUBLE VERTICAL LINE/双柱), 0xA1D0(MINUS SIGN/負符号,減算記号), 0xA1F1(CENT SIGN/セント記号), 0xA1F2(POUND SIGN/ポンド記号), 0xA2CC(NOT SIGN/否定), 0x8FA2B7(TILDE/チルド), 0x8FA2C3(BROKEN BAR/破断線)の文字が異なる。

3.4 IBM拡張文字,NEC特殊文字,ユーザ定義文字に関する相違

変換表x-eucjp-open-19970715-ms, x-eucjp-open-19970715-0201, x-eucjp-open-19970715-asciiは, IBM拡張文字,NEC特殊文字,ユーザ定義文字(の領域)を含むため,IBM拡張文字,NEC特殊文字,ユーザ定義文字をUnicodeに変換している。これらの変換は一致する。しかし, x-eucjp-unicode-0.9, x-eucjp-jisx0221-1995は,これらの文字に関して言及していない。

解説表3.2 日本語EUCから[Unicode 3.1]への変換表の相違(その1)
日本語EUCでのコード値 x-eucjp-unicode-0.9 x-eucjp-jisx0221-1995 x-eucjp-open-19970715-ms
0x5C(REVERSE SOLIDUS/逆斜線) U+005C(REVERSE SOLIDUS) U+005C(REVERSE SOLIDUS) U+005C(REVERSE SOLIDUS)
0x7E(TILDE/チルド) U+007E(TILDE) U+007E(TILDE) U+007E(TILDE)
0xA1B1(OVERLINE/オーバライン,論理否定記号) U+FFE3(FULLWIDTH MACRON) U+FFE3(FULLWIDTH MACRON) U+FFE3(FULLWIDTH MACRON)
0xA1BD(EM DASH/ダッシュ(全角)) U+2015(HORIZONTAL BAR) U+2014(EM DASH) U+2015(HORIZONTAL BAR)
0xA1C0(REVERSE SOLIDUS/逆斜線) U+005C(REVERSE SOLIDUS) U+005C(REVERSE SOLIDUS) U+FF3C(FULLWIDTH REVERSE SOLIDUS)
0xA1C1(WAVE DASH/波ダッシュ) U+301C(WAVE DASH) U+301C(WAVE DASH) U+FF5E(FULLWIDTH TILDE)
0xA1C2(DOUBLE VERTICAL LINE/双柱) U+2016(DOUBLE VERTICAL LINE) U+2016(DOUBLE VERTICAL LINE) U+2225(PARALLEL TO)
0xA1D0(MINUS SIGN/負符号,減算記号) U+2212(MINUS SIGN) U+2212(MINUS SIGN) U+FF0D(FULLWIDTH HYPHEN-MINUS)
0xA1F1(CENT SIGN/セント記号) U+00A2(CENT SIGN) U+00A2(CENT SIGN) U+FFE0(FULLWIDTH CENT SIGN)
0xA1F2(POUND SIGN/ポンド記号) U+00A3(POUND SIGN) U+00A3(POUND SIGN) U+FFE1(FULLWIDTH POUND SIGN)
0xA1EF(YEN SIGN/円記号) U+FFE5(FULLWIDTH YEN SIGN) U+FFE5(FULLWIDTH YEN SIGN) U+FFE5(FULLWIDTH YEN SIGN)
0xA2CC(NOT SIGN/否定) U+00AC(NOT SIGN) U+00AC(NOT SIGN) U+FFE2(FULLWIDTH NOT SIGN)
0x8FA2B7(TILDE/チルド) U+007E(TILDE) U+007E(TILDE) U+FF5E(FULLWIDTH TILDE)
0x8FA2C3(BROKEN BAR/破断線) U+00A6(BROKEN BAR) U+00A6(BROKEN BAR) U+FFE4(FULLWIDTH BROKEN BAR)

解説表3.3 日本語EUCから[Unicode 3.1]への変換表の相違(その2)
日本語EUCでのコード値 x-eucjp-open-19970715-0201 x-eucjp-open-19970715-ascii
0x5C(REVERSE SOLIDUS/逆斜線) U+00A5(YEN SIGN) U+005C(REVERSE SOLIDUS)
0x7E(TILDE/チルド) U+203E(OVERLINE) U+007E(TILDE)
0xA1B1(OVERLINE/オーバライン,論理否定記号) U+FFE3(FULLWIDTH MACRON) U+203E(OVERLINE)
0xA1BD(EM DASH/ダッシュ(全角)) U+2014(EM DASH) U+2014(EM DASH)
0xA1C0(REVERSE SOLIDUS/逆斜線) U+005C(REVERSE SOLIDUS) U+FF3C(FULLWIDTH REVERSE SOLIDUS)
0xA1C1(WAVE DASH/波ダッシュ) U+301C(WAVE DASH) U+301C(WAVE DASH)
0xA1C2(DOUBLE VERTICAL LINE/双柱) U+2016(DOUBLE VERTICAL LINE) U+2016(DOUBLE VERTICAL LINE)
0xA1D0(MINUS SIGN/負符号,減算記号) U+2212(MINUS SIGN) U+2212(MINUS SIGN)
0xA1F1(CENT SIGN/セント記号) U+00A2(CENT SIGN) U+00A2(CENT SIGN)
0xA1F2(POUND SIGN/ポンド記号) U+00A3(POUND SIGN) U+00A3(POUND SIGN)
0xA1EF(YEN SIGN/円記号) U+FFE5(FULLWIDTH YEN SIGN) U+00A5(YEN SIGN)
0xA2CC(NOT SIGN/否定) U+00AC(NOT SIGN) U+00AC(NOT SIGN)
0x8FA2B7(TILDE/チルド) U+007E(TILDE) U+FF5E(FULLWIDTH TILDE)
0x8FA2C3(BROKEN BAR/破断線) U+00A6(BROKEN BAR) U+00A6(BROKEN BAR)

4. HTTP1.1におけるcharsetパラメタ

日本語HTML文書では, 文字化けがしばしば発生することが知られている。これは, メディアタイプtext/htmlのcharsetパラメタを正しく付けているHTML文書がほとんど存在しないことによる。この問題については,[charsetパラメタの勧め]に詳しい情報がある。

XMLで文字化けを避けるためには,必ず正しくcharsetパラメタを設定しなければならない。設定ができないサーバを使用してはならない。

5. 参考文献

Unicode 3.1
The Unicode Consortium. The Unicode Standard, Version 3.1 , The Unicode Standard, Version 3.0 (Reading, MA, Addison-Wesley, 2000. ISBN 0-201-61633-5)によって定義され,Unicode Standard Annex #27: Unicode 3.1 (http://www.unicode.org/reports/tr27)によって改訂されたもの, 2001.
UNIXインターナショナル
UNIXインターナショナル。UNIX SYSTEM V リリース4 日本語環境共通規約, トッパン, 1992.
Unicodeとユーザ定義文字・ベンダ定義文字
TOG/JVC CDE/Motif 技術検討 WG, Unicodeとユーザ定義文字・ベンダ定義文字に関する問題点と解決策, 1996. (http://www.opengroup.or.jp/jvc/cde/ucs-conv.htmlを参照。)
charsetパラメタの勧め
村田, Durst, Nicol. charsetパラメタの勧め: HTMLにおける文字符号化スキームの明示方法, 1998. (http://www.fxis.co.jp/DMS/sgml/xml/saloon/html_correct_charset.htmlを参照。)

6. 原案作成委員会

この標準情報(TR)の原案を作成した(財)日本規格協会 情報技術標準化研究センター(INSTAC)の次世代コンテンツの標準化調査研究委員会及び作業グループ(WG2)を,その順に次に示す。

解説表6.1 次世代コンテンツの標準化調査研究委員会
氏名 所属
(委員長) 池田 克夫 大阪工業大学
(幹事) 村田 真 日本アイ・ビー・エム株式会社
(幹事) 小町 祐史 松下電送システム株式会社
(幹事) 平山 亮 金沢工業大学
内山 光一 株式会社東芝
久保田 靖夫 大日本印刷株式会社
黒川 利明 株式会社CSK
斎藤 伸雄 凸版印刷株式会社
二本松 勝 株式会社日立製作所
木戸 達雄 経済産業省産業技術環境局
藤原 洋 株式会社インターネット総合研究所
松本 充司 早稲田大学
柳町 昭夫 株式会社NHKアイテック
(事務局) 山中 正幸 財団法人日本規格協会

解説表6.2 作業グループ(WG2)
氏名 所属
(主査) 村田 真 日本アイ・ビー・エム株式会社
小町 祐史 松下電送システム株式会社
(幹事) 内山 光一 株式会社東芝
奥井 康弘 株式会社日本ユニテック
上村 圭介 国際大学グローバルコミュニケーションセンター
今郷 詔 株式会社リコー
川俣 晶 株式会社ピーデー
(事務局) 山中 正幸 財団法人日本規格協会