[LE-talk-ja 3] ISO-2022-JP-MS について

Back to archive index

MORIYAMA Masayuki moriy****@mirac*****
2006年 3月 23日 (木) 14:53:22 JST


ミラクル・リナックスの森山です。

いろいろと反響があり説明が必要と思われますので、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 の実装方法ではないかと考えています。

  みなさんの意見をお聞かせいただければと思っております。

--
森山 将之 moriy****@mirac*****
ミラクル・リナックス株式会社




Legacy-Encoding-talk-ja メーリングリストの案内
Back to archive index