英数文字は,7 ビット(128文字)の番号付けが基本となっている。これをASCII(アスキー, American Standard Code for Information Interchange)コードと呼ぶ。
このASCIIコードにカタカナを付けて8ビットで表したものが,JIS8単位コード(あるいは単にJISコード)である。一方,欧米で使用される 8
ビットコード(ISO Latin 1,正式名称はISO-8859-1)では,最上位ビットが 1 の部分に独仏西文字などを割り当てている。
このように,8ビットで表現される文字を半角文字と呼ぶ。
本来英語圏では,文字は7ビットの ASCII 文字だけでよく,電子メールも7ビットの文字だけを扱うことを前提としていた。現在でもこの前提を基本としているメールシステムが一般的である。PCで8ビットの文字として扱っていても,電子メールを送信する際には最上位ビットを削除して7ビットに変換して送信する。
従って,8ビットでないと表現できない半角のカタカナなどは電子メールでは使えない。半角カタカナを電子メールで使用すると,一番上のビットが削られて別のコードと誤って解釈され,文字化けを起こすなどのトラブルが発生することがある。
ASCIIコード表
JIS8単位コード表
ISO Latin 1 正式名称はISO 8859-1,西欧用文字セット。
(上のページが文字化けする場合は,ブラウザの文字コードを Unicode (UTF-8) にすること。)
漢字は2バイトで表現される。これを全画文字と呼ぶ。(注意:全角の英・数・記号も2バイト)
2バイト文字を94個の区(グループ)と94個の点(グループ内の文字の位置)で表現するコードの付け方。(※)
ただこれは文字のグループ分けであって,実際にコンピュータなどで扱うためにコードを割り当てる場合は,この表を元に2バイトの番号を付ける。この付け方に何通りかある。このため,Webブラウザなどで文字化けが起きる。
(※)
94 という個数は,ASCII コードで文字として使えるのは 21(16)から7E(16) までの94個のコードであることによる。
1~94の区と点それぞれに順番に21(16) ~7E(16) という番号を付ける。この番号の付け方をすると,各バイトの1番最初のビットが必ず0になる。
「岡」の区点コードは,18区12点である。この文字のJISコードを求める。
上に書いてあるように,1区の文字の上位バイトは21(16),2区の文字の上位バイトは22(16),・・・となるので,18(10) + 20(16) = 12(16) + 20(16) = 32(16)より18区の文字の上位バイトは 32(16) である。同様に12(10) + 20(16) = C(16) + 20(16) = 2C(16)より,下位バイトは 2C(16) である。
よって,「岡」のJIS コードは 322C(16) である。
JISコードは,バイトごとに見ると ASCII コードと同じ値を使用するので,コードを見ただけでは1文字の2バイト文字なのか2文字の1バイト文字なのか判断できない。
例えば上記の 322C の場合,「岡」なのか,「2」(= 32(16))と「,」(コンマ,= 2C(16))の2文字が連続しているのか判断できない。そこで
2バイト文字列の前には 1B 24 42 を
1バイト文字列の前には 1B 28 42 を
置いて,後に続くコードがどちらであるかを指定する。これらを,エスケープシーケンスと呼ぶ。
ただし,1バイトコードを前提にするので,1バイトコードから始まる場合はエスケープシーケンスを置かない。また2バイトコードで終了する場合は,1バイトコード用のエスケープシーケンスを最後に追加する。
岡山大学のコンピュータ教室に導入している NoEditor は1バイトコードのエスケープシーケンスとして 1B 28 4A を使用している。これは JIS で半角英数への切り替えを示すもので,動作は上記の 1B 28 42 と同じになる。上記の 1B 28 42 は ASCII へのエスケープシーケンスで,こちらを採用するテキストエディタが多い。
「日本はE組」(Eは半角)は
1B 24 42 46 7C 4B 5C 24 4F 1B 28 42 45 1B 24 42 41 48 1B 28 42
(日:467C,本:4B5C,は:24 4F,E:45,組:41 48)
となる。最後の 1B 28 42 は,最後は必ず 半角コードに戻すというルールがあるため。
上の半角文字の項にも書いてあるように,インターネット,特に電子メールでは文字コードを7ビットに変換してから送信する場合が多い。メールヘッダの
Content-Transfer-Encoding: 7bit
はこの変換を行っていることを意味する。
JISコードは上記のように各バイトの最初のビットが0であるため,7ビットに縮めても文字コードは変わらない。このため電子メールではJISコードが用いられることが多い。
なお Gmail では標準で JIS ではなく UTF-8 を使用する設定になっている。(UTF-8 でそのまま送信するのではなく,BASE64 という変換をして7ビットコードに変換しているので,問題は発生しない) Gmail でヘッダを確認するには,メールを開いてメール本文右上のプルダウンボタン[その他]から[メッセージのソースを表示]を選択する。
「愛」のJISコードは,0x3026 = 00110000 00100110 であり,各バイトの最初のビットは 0 である。 これを7ビットに縮めて 0110000 0100110 として扱う。
MS Windows や Macintosh で使用される。
半角文字の JIS8単位コード表でわかるように,8ビットの文字コードでは 80(16) ~ 9F(16) と E0(16) ~ FF(16) は使用されない。全角文字を表す場合,第1バイトにこのコードを使用することで,全角と半角を区別する。つまり第1バイトを見れば個々の文字が1バイト文字なのか2バイト文字なのかが分る。その結果,全角と半角を切り替えるためのエスケープシークエンスは不要となる。
Shift-JIS は,文字は21~7E,A1~FE を使用するというルールに沿っていないため,公式に認められた文字コードではない。
Microsoft の Codepage を参照。
UNIX で使用される。1~94の区と点それぞれに順番にA1(16) ~FE(16) という番号を付ける。全角文字と ASCII 文字が別の1バイトコードを使用するので,エスケープシークエンスは不要である。ただし JIS8単位コード のカタカナの部分と重複しているので,半角カタカナは使用できない。
「岡」の区点コードは,18区12点である。この文字のEUCコードを求める。
上に書いてあるように,1区の文字の上位バイトはA1(16),2区の文字の上位バイトはA2(16),・・・となるので,18(10) + A0(16) = 12(16) + A0(16) = B2(16)より18区の文字の上位バイトは B2(16) である。同様に12(10) + A0(16) = C(16) + A0(16) = AC(16)より,下位バイトは AC(16) である。
よって,「岡」の EUCコードは B2AC(16) である。
上記のようなコード体系には
など,様々な問題がある。
そこで,日本・中国・ハングル・アラビアなど世界の主な国の文字を統一的に扱うために,Unicode が考案された。Unicode では,英数文字も含めてすべての文字を2バイトで表す。つまり,全部で 216 = 65536 種類の文字が使用可能である。(足りなくなって,3バイトの部分を作ってしまった・・・)
使用できる文字一覧については,unicode公式サイトにあるコード表を参照のこと。
コンピュータで Unicode を扱う場合,そのままのコードではなく UTF-8 を使用する場合が多い。UTF-8 のコード割り当てのルールは,RFC3629 に定められている。UTF-8 では,元のunicodeの値に応じて,次のようにビット数の異なる文字コードを実装する。
Unicode の範囲 | Unicode のビット列 | UTF-8 のビット列 |
---|---|---|
0x0000 ~ 0x007F (00000000 00000000 ~ 00000000 01111111) | 0000 0000 0abc defg | 0abc defg |
0x0080 ~ 0x07FF (00000000 10000000 ~ 00000111 11111111) | 0000 0abc defg hijk | 110a bcde 10fg hijk |
0x0800 ~ 0xFFFF (00001000 00000000 ~ 11111111 11111111) | abcd efgh ijkl mnop | 1110 abcd 10ef ghij 10kl mnop |
(0xFFFF を超える文字については略)
UTF-8 には以下のような特徴がある。
「岡」(部首は山)の Unicode は
5CA1
これを2進数で表すと
0101 1100 1010 0001
よって「岡」を UTF-8 で表したときのビット列は
1110 0101 1011 0010 1010 0001 (赤字は元の Unicode のビット列)
となる。これを16進数で表現すると
E5B2A1
である。
秀丸エディタやNoEditor で 岡山okayama と入力し,様々の文字コードを指定して保存せよ。
そのファイルのサイズを確認せよ。
またそのファイルの内容を Stirling などのバイナリエディタで確認せよ。