読者です 読者をやめる 読者になる 読者になる

sos の 作業メモ

プログラミングや英会話学習、マイルや旅行、日常生活など。最近はWebFormなASP.NETのお守りがお仕事です。

日々の生活にhappyをプラスする|ハピタス Gポイント

文字コード超研究 15章〜16章

プログラム一般 読書

文字コード「超」研究 改訂第2版

文字コード「超」研究 改訂第2版

前回の続き

15章 ISO-2022-JP

日本語用のエンコーディングスキームの一つ。ISOの名前がついているが、ISOが制定した規格ではない。また、JISが制定したものでもない。JIS X 0201JIS X 0208を実装する情報交換用の文字コードとして考案され、RFC 1468として登録されたものである。

  • 7ビット系のISO 2022において、G0の1面だけを使用する
  • GLにG0を常に呼び出す(呼び出し制御文字は不要)
  • エスケープシーケンスによるG0への指示により、文字集合の切替を行うステートフルエンコーディング。
  • 0x20は常に空白文字
  • 改行文字までにASCIIに戻す

なお、RFC1554にはISO-2022-JP-2, RFC 2237には ISO-2022-JP-1が規定され、JIS X 0213:2000の附属書2には ISO-2022-JP-3が掲載されている。これらは、ISO-2022-JPの枠組みはそのままで、使用できる文字集合とエスケープシーケンスを増やしたものとなる。

ISO-2022-JP (RFC 1468)

使用可能な文字集合は以下( 後ろは切替に使用するエスケープシーケンス)

JIS X 0201右面や、JIS X 0208-1990、JIS X 0208-1997は含まれていないため、半角カナ等、これらで定義されている文字の使用は認められていない。

行頭は必ずASCIIで始まる(行末までにASCIIに戻しておく)というルールがあるおかげで、なんらかの通信障害によりエスケープシーケンスが失われても、行頭はASCIIとして処理を開始できるというメリットがある。

ISO-2022-JP-2

ISO-2022-JPに追加して、以下の文字集合を使用可能にしたもの

  • GB2312-80(中国) - ESC $ A
  • JIS X 0212-1990(補助漢字) - ESC $ ( D
  • KS X 1001:1992(韓国) - ESC $ ( C
  • ISO 8859-1:1998右半面(ラテン文字1) - ESC . A
  • ISO 8859-7:1998右半面(ラテン/ギリシア文字) - ESC . F

8859のラテン文字を使う時に、G2へシングルシフトで一文字ずつコード表へロードして使う。

ISO-2022-JP-1

ISO-2022-JPに追加して、以下の文字集合を使用可能にしたもの

ISO-2022-JP-2のサブセットとも言える。

ISO-2022-JP-3

JIS X 0213を使えるようにするための国定のISO-2022-JP

JIS X 0213の1面で既に JIS X 0208が使えるのに、なぜJIS X 0208単独のエスケープシーケンスも用意されているのか不思議だが、単に互換性のためらしい。

ISO-2022-JPと半角カナ

RFC的には違反だが、色々な手法でメーラーが対応している。

ESC ( I 方式

JIS X 0201右半面を呼び出す ESC ( I をそのまま使う方法。割とオーソドックスな手法。

SO SI方式

JIS X 0201の右半面をG1にロードしたと仮定して、SO(0x0e)で半角カナ開始、SI(0x0f)で終了とするもの。ほとんど使われない。

8ビット方式

ESC ( J (JIS X 0201の左半面)のエスケープシーケンスに続いて、8bitコードで半角カナを使う環境もあるらしい。7bitしか通さない環境なんてほとんどないので、たしかにこれでも大丈夫なのかもしれない。

16章 EUC-JP

AT&Tが各地で現地版のUNIX文字コードとして策定したうちの一つ。韓国版のEUC-KR、中国語版のEUC-CN、台湾版のEUC-TW等がある。

EUC-JPは、JIS X 0201 / JIS X 0208 / JIS X 0212と親和性の高いエンコーディングスキーム。

文字種

8ビット系のISO 2022の応用で、G0,G1,G2,G3の文字集合をGLとGRに呼び出して使う。 EUC-JPで規定されているのは以下の文字種。

エスケープシーケンスが不要な代わりに、複数の国のEUCは混在できず、しかもどの国のEUCかを判別させる方法を持たない欠点がある。

呼び出し方
  • ASCII - 0x21~0x7e (1byte)
  • JIS X 0201カナ(半角カナ) - 0x8e + 0xa1~0xfe (2byte)
  • JIS第1水準 - 0xa1~0xa8 + 0xa1~0xfe (2byte)
  • JIS第2水準 - 0xb0~0xf4 + 0xa1~0xfe (2byte)
  • JIS補助漢字 - 0x8f + 0xa1~0xfe + 0xa1~0xfe (3byte)

EUC-JIS-2004

EUCの枠組みを使って JIS X 0213を表示するためのもの

  • G0 - ASCII
  • G1 - JIS X 0213:2004第1面 (JIS 第1/第2/第3水準漢字)
  • G2 - JIS X 0201右半面 (半角カナ)
  • G3 - JIS X 0213:2004第2面 (JIS第4水準漢字)

というわけで、日本でよく使われているエンコーディングスキームの3つのうちの2つが終了。実はEUC-JPって非常に扱い易いスキームだったんですよね…unixでさえなければもっと普及したろうに…

次回へ続く