文字コード特集

本ページは、過去に取り上げた文字コード関連の記事をまとめたものです。
内容は当時のものですので、ご注意下さい。


[98/04/10]


[98/04/13]


[98/04/17]

  1. Shift-JISコード

    前回お話したJIS漢字コードは、エスケープシーケンスがあるため、文字列の見た目の長さと実際の長さが異なり、コンピュータの内部コードとしては非常に扱いにくいものです。

    そこで、エスケープシーケンスを使用せずに漢字を利用しようと考えられたのがShift-JISコードです。

    マイクロソフト社が中心となって開発されたため、MS漢字コードと呼ばれることもあります。

    MacintoshやWindowsで採用されている文字コードでもあります。

  2. Shift-JISコード詳細

    Shift-JISコードもJIS漢字コードと同様に2バイトで漢字1文字を表しますが、その第1バイトの範囲は0x81〜0x9Fおよび0xE0〜0xFCとなっています。

    これは、ASCIIの制御文字(0x00〜0x1F、0x7F)、空白(0x20)、英数字(0x21〜0x7E)および半角カタカナ(0xA1〜0xDF)を避けて配置されています。

    つまり、JISのコード表上の漢字を、ASCII文字や半角カタカナ等と重ならない位置へずらして(シフトさせて)配置したことから「Shift-JIS」と呼ばれています。

    ASCIIコードでは、1バイト(8ビット)のうち、最上位の1ビットは使用されず、7ビット(0x00〜0x7F)のみ使用されています。

    このため、あるバイトの最上位ビットがOFFであればASCII(英数字)、ONであれば、漢字(の第1バイト)又は半角カタカナ、と区別することができるので、エスケープシーケンスを使用しなくても漢字と英数字の混在が可能となったのです。

  3. Shift-JISコードの問題

    まず、インターネットのニュースやメールの世界では、現在でも7ビットのコードしか通らない場合があり、Shift-JISコードを使用すると文字化けしてしまうことがあります。これは最上位の1ビットが落ちてしまうためです(同じ理由で8ビットの半角カタカナも文字化けします)。

    また、漢字1文字を構成する2バイトのうち、前述のように第1バイトはASCIIコードと重ならない位置に配置されていますが、第2バイトの範囲は0x40〜0x7E、0x80〜0xFCであり、一部がASCIIコードと重なります。

    以前、本ページでHFSボリュームでは「色」と「診」という名前のファイルを同一階層に作成することができないということをお伝えしました(2月18日の記事)。

    「色」はShift-JISコードで0x9046、「診」は0x9066ですが、0x46がASCIIコードの英大文字の「F」、0x66が英小文字の「f」と重なっています。

    Macのファイルシステムは、漢字であっても1バイトごとに処理を行っているので、「色」(0x9046)と「診」(0x9066)を比較すると、最初の1バイトは共に「0x90」で同じ値、2バイト目は「0x46」と「0x66」でF/fの大文字/小文字の違いしかないと判断します。

    Macのファイルシステムはファイル名の英大文字/英小文字を同一と見なすため、「色」と「診」を同一のファイル名と判断してしまうのです。

    また、本来のASCIIコードは7ビットしか使用していないのですが、ASCIIコードの説明(4月10日の記事)で書きましたように、米国以外の地域やメーカーは、この部分に独自の文字を割り当てました。

    日本でも半角カタカナをこの部分に入れたのですが、Shift-JISコードの第1バイトは半角カタカナに割り当てられた値を避けて配置されているので、これは特に問題ありません。

    しかし、ヨーロッパで割り当てられたアクセント記号やウムラウト記号付き文字のコードがShift-JISコードの第1バイトと重なる場合があります。

    このため、たとえばヨーロッパのWebページを見たとき、漢字に文字化けしてしまう等の問題が発生することになってしまいました。

次回、Unicode編に続く(多分)。


[98/04/18]


[98/04/24]


←TOPページに戻る

「Macintoshは米国アップルコンピュータ社の商標です」
「その他、記載の商品名などは、一般に各社の登録商標または商標です」

Copyright (C) Toshimitsu Tanaka 1998.