[LE-talk-ja 3] ISO-2022-JP-MS について
MORIYAMA Masayuki
moriyama @ miraclelinux.com
ミラクル・リナックスの森山です。
いろいろと反響があり説明が必要と思われますので、ISO-2022-JP-MS について
説明したいと思います。
まず比較のため、次の5つの文字コードの簡単な定義を示します。
・x-iso2022jp-cp932
・CP50220
・CP50221
・CP50222
・ISO-2022-JP-MS
これら 5 つは、Unicode 経由で cp932 と相互変換可能のなのものです。
■ x-iso2022jp-cp932
o TR X 0015:2002 XML日本語プロファイルで定義されている
o Windows 機種依存文字は表現できない
TR X 0015:2002 XML日本語プロファイル
購入
http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?lang=jp&bunsyoId=TR+X+0015%3A2002&dantaiCd=JIS&status=1&pageNo=0
HTML
http://www.y-adagio.com/public/standards/tr_xml_jpf2/toc.html
使用するエスケープシーケンス
文字セット esc seq. 1バイト目 2バイト目
--------------------- --------- ------------------- --------- ------
US-ASCII ESC ( B 0x00-0x7F -- in/out
JIS X 0201 ラテン文字 ESC ( J 0x00-0x7F -- in
JIS X 0208:1978 ESC @ B 0x21-0x28,0x30-0x74 0x21-0x7E in
JIS X 0208:1997 ESC $ B 0x21-0x28,0x30-0x74 0x21-0x7E in/out
※in = x-iso2022jp-cp932 から Unicode への変換
out= Unicode から x-iso2022jp-cp932 への変換
■ CP50220
o Windows Codepage 50220
o Outlook Express, Internet Explorer での ISO-2022-JP
o JIS X 0201 片仮名を JIS X 0208 の片仮名に置換
使用するエスケープシーケンス
文字セット esc seq. 1バイト目 2バイト目
--------------------- --------- ------------------- --------- ------
US-ASCII ESC ( B 0x00-0x7F -- in/out
JIS X 0201 ラテン文字 ESC ( J 0x00-0x7F -- in
JIS X 0201 片仮名 ESC ( I 0x21-0x5F -- in
SO/SI 0x21-0x5F -- in
ESC ( B 0xA1-0xDF -- in
ESC ( J 0xA1-0xDF -- in
JIS X 0208:1978 ESC @ B 0x21-0x28,0x30-0x74 0x21-0x7E in
JIS X 0208:1997 ESC $ B 0x21-0x28,0x30-0x74 0x21-0x7E in/out
NEC特殊文字 ESC $ B 0x2D 0x21-0x7E in/out
NEC選定IBM拡張文字 ESC $ B 0x79-0x7C 0x21-0x7E in/out
ユーザ定義文字 ESC $ B 0x7F-0x92 0x21-0x7E in/out
※in = CP50220 から Unicode への変換
out= Unicode から CP50220 への変換
■ CP50221
o Windows Codepage 50221
o JIS X 0201 片仮名を ESC ( I でエンコード
使用するエスケープシーケンス
文字セット esc seq. 1バイト目 2バイト目
--------------------- --------- ------------------- --------- ------
US-ASCII ESC ( B 0x00-0x7F -- in/out
JIS X 0201 ラテン文字 ESC ( J 0x00-0x7F -- in
JIS X 0201 片仮名 ESC ( I 0x21-0x5F -- in/out
SO/SI 0x21-0x5F -- in
ESC ( B 0xA1-0xDF -- in
ESC ( J 0xA1-0xDF -- in
JIS X 0208:1978 ESC @ B 0x21-0x28,0x30-0x74 0x21-0x7E in
JIS X 0208:1997 ESC $ B 0x21-0x28,0x30-0x74 0x21-0x7E in/out
NEC特殊文字 ESC $ B 0x2D 0x21-0x7E in/out
NEC選定IBM拡張文字 ESC $ B 0x79-0x7C 0x21-0x7E in/out
ユーザ定義文字 ESC $ B 0x7F-0x92 0x21-0x7E in/out
※in = CP50221 から Unicode への変換
out= Unicode から CP50221 への変換
■ CP50222
o Windows Codepage 50222
o JIS X 0201 片仮名を SO/SI でエンコード
使用するエスケープシーケンス
文字セット esc seq. 1バイト目 2バイト目
--------------------- --------- ------------------- --------- ------
US-ASCII ESC ( B 0x00-0x7F -- in/out
JIS X 0201 ラテン文字 ESC ( J 0x00-0x7F -- in
JIS X 0201 片仮名 ESC ( I 0x21-0x5F -- in
SO/SI 0x21-0x5F -- in/out
ESC ( B 0xA1-0xDF -- in
ESC ( J 0xA1-0xDF -- in
JIS X 0208:1978 ESC @ B 0x21-0x28,0x30-0x74 0x21-0x7E in
JIS X 0208:1997 ESC $ B 0x21-0x28,0x30-0x74 0x21-0x7E in/out
NEC特殊文字 ESC $ B 0x2D 0x21-0x7E in/out
NEC選定IBM拡張文字 ESC $ B 0x79-0x7C 0x21-0x7E in/out
ユーザ定義文字 ESC $ B 0x7F-0x92 0x21-0x7E in/out
※in = CP50222 から Unicode への変換
out= Unicode から CP50222 への変換
■ ISO-2022-JP-MS
o JIS X 0201 片仮名を ESC ( I でエンコード
o ユーザ定義文字を ESC $ ( ? でエンコード
使用するエスケープシーケンス
文字セット esc seq. 1バイト目 2バイト目
--------------------- --------- ------------------- --------- ------
US-ASCII ESC ( B 0x00-0x7F -- in/out
JIS X 0201 ラテン文字 ESC ( J 0x00-0x7F -- in
JIS X 0201 片仮名 ESC ( I 0x21-0x5F -- in/out
JIS X 0208:1978 ESC @ B 0x21-0x28,0x30-0x74 0x21-0x7E in
JIS X 0208:1997 ESC $ B 0x21-0x28,0x30-0x74 0x21-0x7E in/out
NEC特殊文字 ESC $ B 0x2D 0x21-0x7E in/out
NEC選定IBM拡張文字 ESC $ B 0x79-0x7C 0x21-0x7E in/out
ユーザ定義文字 ESC $ ( ? 0x21-0x34 0x21-0x7E in/out
※in = ISO-2022-JP-MS から Unicode への変換
out= Unicode から ISO-2022-JP-MS への変換
ユーザ定義文字のエスケープシーケンスは JIS X 0202:1998 (ISO/IEC
2022:1994) 情報技術―文字符号の構造及び拡張法 の次の規定を利用
------------------------------------------------------------------
13.3.3 私用 どのエスケープシーケンスにおいても, 終端バイトの Fp (
すなわち, 03 の列) は, 私用のため保留とする。私用のためのエスケー
プシーケンスは, ISO 2375 の登録対象外とする。これらは, 交換当事者
間の合意によって定義する。
------------------------------------------------------------------
■ 検討
○ x-iso2022jp-cp932
TR X 0015:2002 XML日本語プロファイル > 5.5 ISO-2022-JP > 参考2 を引用
します。
----------------------------------------------------------------------
参考2 いったんシフトJIS又は日本語EUCを経由するからといっても,[IETF
RFC 1468]が許していない文字が使用できるわけではない。たとえば,
x-sjis-cp932は, NEC特殊文字, NEC選定IBM拡張文字, IBM拡張文字, ユーザ外
字を表現できるが,x-iso2022jp-cp932がそれらの文字を表現できるわけでは
ない。
----------------------------------------------------------------------
この事から、x-iso2022jp-cp932 で Windows 機種依存文字を表現する事は好
ましくないと思われます。
Windows 利用者からのメールに含まれる Windows 機種依存文字を変換して処
理したいという目的には使えない事になります。
○ CP50220〜CP50221
上記の定義は、明文化されているものではなく、独自に調べた結果をまとめて
ものです。
JIS X 0201 片仮名の変換の違いにより 3 種類のコードページが用意されて
いるという事と、ユーザ定義文字の表現方法が JIS X 0202(ISO/IEC 2022)
から逸脱しているという点が特徴的です。
x-iso2022jp-cp932 として出力する場合は、アプリケーションソフトウェアで
JIS X 0201 片仮名、Windows 機種依存文字、ユーザ定義文字のフィルタリン
グをする必要があると思われます。
○ ISO-2022-JP-MS
用途によって、フィルタリングすべき文字セットが変化する事が予想されるた
め、文字コード変換のレベルでは、フィルタリングを施さずに変換できるよう
にしておいた方が良いのではないかと考えて ISO-2022-JP-MS を定義しまし
た。
ユーザ定義文字に関しては、Outlook Express (CP50220) のように、ISO
2022 から逸脱した方法でエンコードしてしまうのは好ましくないため、
ISO-2022-JP-MS では ISO 2022 (JIS X 0202) に沿う形でエスケープシーケ
ンスを定義しています。
■ ご意見をください。
ISO-2022-JP-MS のようなものを作ってしまうと、アプリケーションソフト
側で適切にフィルタリングせずに、ISO-2022-JP として出力してしまう事に
つながるから問題だという考え方もあるかもしれません。
この問題に対する解決策の 1つの案として、重複定義文字を除く CP932 の
全文字を扱える ISO-2022-JP-MS と、x-iso2022jp-cp932 のように RFC1468
の ISO-2022-JP としてそのまま使えるものと 2 種類用意する事かなと考え
ているところです。
メール受信時は、ISO-2022-JP-MS でデコードし、メール送信時は
x-iso2022jp-cp932 でエンコードして、変換できない文字が含まれる場合は、
警告メッセージを出して UTF-8 などで送信するといった処理が、迷惑にな
らない MUA の実装方法ではないかと考えています。
みなさんの意見をお聞かせいただければと思っております。
--
森山 将之 moriyama @ miraclelinux.com
ミラクル・リナックス株式会社
Legacy-Encoding-talk-ja メーリングリストの案内 |