sos の 作業メモ

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

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

文字コード超研究 9章〜10章

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

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

前回の続き

9章 JIS X 0201

ISO 646に基づいて、英数字に加えて半角カナを使えるようにした日本製の文字コード系。 128個以上の文字となるため、2つのやり方が考えられる。

7ビット構造の JIS X 0201

7bitのコード表を2枚用意し、制御文字で切り替える。半角カナの右側の表を使う時には、SO(SHIFT OUT 0x0e)でコード表をきりかえて、左側に戻すにはSI(SHIFT IN 0x0f)を入力する。この様な、状態を持つ文字コード系を、ステートフルエンコーディングとかモーダルな文字コード系と呼ぶ。ステートフルエンコーディングは、バイト列の途中からではどの状態かを判断できない不便な点がある。

8ビット構造の JIS X 0201

領域を8bitに拡張し、0x00 - 0xffの256コードポイントに文字を割り振る。7ビット構造のJIS X 0201の半角カナに0x80を足せば8ビット構造の半角カナのコードが得られる。状態を持たない文字コード系を、ステートレスエンコーディングと呼ぶ。

構造としては8ビットの方が扱い易いが、7bitを前提とした伝送路や機器が未だに稼働しているところもあるため、全てを8ビットに統一というのもなかなか難しいらしい。

10章 ISO 2022

正式にはISO/IEC 2022

文字コード系そのものというよりも、文字コード系の切替方法を枠組みを示したものと考えるほうがよい。 ISO 2022に準拠した各国の様々なコード系を切り替えて使用する事で、単一のファイル内で複数のコード系を扱えるようになる。もちろん、複数バイトの文字コード系への切替も可能。(7ビット構造のJIS X 0201もISO 2022に準拠している)

1バイトで済む言語は1バイトで表現し、多バイトが必要なものは相応のコード表を用いるという、過去に考案された文字コード系との互換を維持しつつ複数コードを利用するために考案された。 ステートフルエンコーディングである。

7ビット系

0x00 - 0x7fを使う規格。符号空間を以下のように定義して、エスケープシーケンスを用いて中間バッファに文字コード表をdesignateして、それをGLに呼び出して使う。

  • C0 : 0x00 - 0x1f 0番目のControl Characters
  • C1 : 0x40 - 0x5f 1番目のControl Characters。ESCに続いて入力する。
  • GL : 0x20 - 0x7f Graphic Left (図形文字)
  • G0,G1,G2,G3 : 中間バッファ

8ビット系

0x00 - 0xffを使う規格。符号空間を以下のように定義して、エスケープシーケンスを用いて中間バッファに文字コード表をdesignateして、それをGL,GRに呼び出して使う。

  • C0 : 0x00 - 0x1f 0番目のControl Characters
  • C1 : 0x80 - 0x9f 1番目のControl Characters
  • GL : 0x20 - 0x7f Graphic Left
  • GR : 0xa0 - 0xff Graphic Right
  • G0,G1,G2,G3 : 中間バッファ

エスケープシーケンス

7ビット/8ビット系のG0-G3バッファに文字コード表をdesignateするときのエスケープシーケンスは、ISO 2022規格で文字コード表毎に一意になるように定められている。

JIS X 0212左(JISローマ字)なら ESC ( J (0x1b2842), JIS X 0208-1978(旧JIS漢字)なら ESC$@(0x1b2440)等。


ISO 2022はとても複雑な規格。必要な部分を実装すれば良いらしく、日本のJIS X 0208JIS X 0212も、その一部を実装した ISO 2022準拠となっている。

次回へ続く