もぐてっく

人は1つ歳をとるたび、1ビットづつ大きくなれると信じてた。

JISコードの秘密

外注さんとダベる。


『もぐのさん。C#で文字列をJISにするときってどうしてます?』
「ん?GetEncodingでISO2202的なもんを指定するんちゃうかったっけ?」


昔趣味でメール関係のソフトを書いたことがあるから、なんとなく知ってるのだ。


『いやぁ、そうすると全角漢字1文字が5バイトになっちゃうんですよ。』
「あ、多分その1バイト目0x1bやろ?それエスケープシーケンスやな。」
『困ったなぁ。仕様上一文字2バイト固定なんですよ。この表示器。』
「んー?ちょっと仕様書見せてみ?」


仕様書には確かに「文字コードにはJIS第一、第二水準を用いること。」の文言。
これってJISコード?なんか違うような・・・。


てな訳で調べてみた。


実はJISには文字種ごとにコード体系があり、それぞれ別の規格であると。
ASCIIならJIS X 0201、件の第一、第二水準はJIS X 0208補助漢字JIS X 0212などがある。


んでJISの特徴として、7ビットの伝送路で使えるようにすべての文字は0x00〜0x7Fの範囲にマップされているわけで。
それ即ち、ASCIIのマップにダダ被るので、半角英数と漢字を混ぜたりすると文字化けグチャグチャのカオス状態になっちゃいますと。


そこで登場するのが世間一般にJISコードと呼ばれるISO-2202-jp。
これは文字列の前後に文字列のコード体系を示すエスケープシーケンスを挿入することで、マップが重なる異なるコード体系を許容している。
例えばJIS X 0201ならESC ( B、JIS X 0209はESC $ Bを用いると。


ううむ、MIDIのバンク切り替えで一杯音色が使えるような感じ?ちょっと違うか。


結局、外注の彼は自力で変換ロジックを書くことにしたようです。