本ページは、過去に取り上げた文字コード関連の記事をまとめたものです。
内容は当時のものですので、ご注意下さい。
[98/04/10]
| 2進表記 | 16進表記 |
| 0000 0000 | 0x00 |
| 0000 0001 | 0x01 |
| 0000 0010 | 0x02 |
| : | : |
| 0000 1110 | 0x0E |
| 0000 1111 | 0x0F |
前述の「A」は16進表記では「0x41」となります。
以上、1バイトコードについて、簡単に説明を行いました。要望があるか気が向いたら2バイトコードについても説明を行いたいと思います。
ご意見やご質問、誤りの指摘などありましたらこちらまでお願いします。
(全体的に反響少ないので...)
[98/04/13]
次回、Shift-JIS編に続く(かもしれない)。
[98/04/17]
- Shift-JISコード
前回お話したJIS漢字コードは、エスケープシーケンスがあるため、文字列の見た目の長さと実際の長さが異なり、コンピュータの内部コードとしては非常に扱いにくいものです。
そこで、エスケープシーケンスを使用せずに漢字を利用しようと考えられたのがShift-JISコードです。
マイクロソフト社が中心となって開発されたため、MS漢字コードと呼ばれることもあります。
MacintoshやWindowsで採用されている文字コードでもあります。
- 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バイト)又は半角カタカナ、と区別することができるので、エスケープシーケンスを使用しなくても漢字と英数字の混在が可能となったのです。
- 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]
| ビット0 | ビット1 | ビット2 | ビット3 | ビット4 | ビット5 | ビット6 | ビット7 |
| 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |
| 27ビット | 26ビット | 26ビット | 24ビット | 23ビット | 22ビット | 21ビット | 20ビット |
ここで、左の方が「上」だと考えてください。つまり「最上位ビット」とは一番左側のビット(「ビット0」又は「27ビット」)のことです。
1バイト(8ビット)の場合、最上位ビットがOFFというのは「0***
****」、ONは「1*** ****」という値です(「*」は0でも1でも良いと考えてください)。
また、2進表記が長くて分かりにくいため、通常は16進表記が使用されることは4月10日の記事でお話ししましたが、これを16進表記で表すと、最上位ビットがOFFというのは「0x0*〜0x7*」、ONは「0x8*〜0xF*」となります(「*」は0〜Fのどれでも良いです)。
ASCIIコード(0x00〜0x7F)では最上位ビットがOFF、Shift-JISコードの第1バイト(0x81〜0x9F,0xE0〜0xFC)および半角カタカナ(0xA1〜0xDF)では最上位ビットがONであることがご理解頂けましたでしょうか?
なお、「ビットn」という呼び方では、2の重みに対応した名称(1バイトの最上位ビットだとビット7)を使用する場合もあります。
[98/04/24]
以上、1バイトコード/2バイトコード/Unicodeと、文字コードについて簡単に説明を行いましたが、それぞれのコードについて大体のところはご理解いただけましたでしょうか?
疑問点やご意見などありましたらお聞かせ下さい。
「Macintoshは米国アップルコンピュータ社の商標です」
「その他、記載の商品名などは、一般に各社の登録商標または商標です」
Copyright (C) Toshimitsu Tanaka 1998.