質問: UTFしか知らない私がレガシーなシステムを触っています。 そこにはASCIIとシフトJISが入り混じってまして、なんでバグらないんだろうと思いそれぞれのコード表を見比べてみたら、 (10進)0~127のコードに対する文字が全く同じように見えました。 シフトJIS(CP932)ってASCIIから派生してできたものなんですか? ググっても回りくどい説明ばかり見つかってて・・・
回答: ASCIIからの派生と言うか、ASCIIの文字コードを利用したほうが文字の互換性を保ちやすからそうしたのだと思います。 日本語の場合は、ASCIIを拡張して半角カタカナに対応したANKコードというのがまず作られました。 銀行のシステムに未だ半角カタカナが残るのはこの名残りです。 ASCIIは0x00-0x7Fまでを使うのはご存知だと思います。 ANKコードは、ASCIIそのままの0x00-0x7Fと、カタカナとして0xA0-0xDFを使っています。 時代が進み、漢字に対応できそうなほどPCの性能があがりました。 しかし、拡張ASCIIの限界は8bitですから、ASCIIだけでは漢字の数に対応できません。 そこで、ANKコードで使っていない0x80-0x9Fに目をつけます。 1バイト目が0x80-0x9Fの時は2バイト目を参照すれば良いんじゃない?って感じです。(この手法はUTF-8にも利用されるほど画期的なアイデアだったと思います) 実際には0x81-0x9F,0xE0-0xFCを使っていて1バイト目が該当すれば、2バイト目を参照するよう仕組みを作りました。 これにより、システムがASCIIとSHIFT-JISを切り替えること無く、SHIFT-JISだけでASCIIの文字もそのまま表示できる環境ができました。 ヨーロッパでも同様に、ASCIIを拡張しているために、SHIFT-JISはヨーロッパの拡張ASCIIとは相性は悪いです。 また、コンピュータが普及すると、中国の文字数に対応できないという問題にも遭遇したりして、Unicodeへと移っていきました。