1バイトコード

1バイトコードの歴史

どの数値にどの文字を割り当てるかを取り決めておく必要がありますがやり方は1つではありません。

1バイトで済んでいた時代の文字コードでもいろいろ変遷があります。

文字コード 説明 ビット数
ASCII アメリカ合衆国の文字コード 7ビット
ISO/IEC 646 国際標準化機構の文字コード ASCIIを元にした国際規格 7ビット
ISO/IEC 8859 国際標準化機構の文字コード ASCIIを8ビットに拡張した 8ビット
JIS X 0201 日本の文字コード。ISO/IEC 646 を元に半角カナを追加 7ビット/8ビット

8ビットでも不足で世界はユニコードで統一に向かいます。それでもASCII部分はほとんど共通ですからそこを眺めてください。

ASCIIコード

American Standard Code for Information Interchange の頭文字から作った名前でアスキーと読みます。もともとテレタイプで使っていたものを流用した7ビットコードで、残りの1ビットはチェックのために使っていました。

0x00から0x7fまでの128のコードのうち、0x00から0x1fまでは制御コードで普通の文字ではありません。改行や紙送り、バックスペース(一文字削除)、ベルを鳴らす、拡張文字の開始など機器を制御する信号に割り当てられています。

一般の文字は0x20から0x7eまでの95文字で、記号、数字、英字(大文字と小文字)からなっています。0x7fは歴史的理由により削除の意味の制御コードでです。

この文字コードから JISX0201 や ISO-8859-1 などいろいろな文字コードが作られましたが、どれも ASCII と呼んでしまうほどよく知られています。

US-ASCIIコード表

41 が A, 6D が m と読みます。

1桁目→
↓2桁目
01 23 45 67
0NUL DLE SP0@P`p
1SOH DC1 !1AQaq
2STX DC2 "2BRbr
3ETX DC3 #3CScs
4EOT DC4 $4DTdt
5ENQ NAK %5EUeu
6ACK SYN &6FVfv
7BEL ETB '7GWgw
8BS CAN (8HXhx
9HT EM) 9IYiy
ALF SUB *:JZj z
BVT ESC +;K[k{
CFF FS, <L\l|
DCR GS -=M]m}
ESO RS .>N^n~
FSI US /?O_o DEL

ISO/IEC 646

アメリカ合衆国の規格であるASCIIを元にISO(国際標準化機構)とIEC(国際電気標準会議)が策定した7ビットコードをいいます。JISが基づいているのはこちらなのですが、ASCIIの知名度が高くこちらは知られていません。

英語ではASCIIのアルファベットで全部の文字が表現できますが、フランス語のアクサンやセデーユのついた文字、ドイツ語のウムラウトのついた文字やエスツェット、さらに各国の通貨記号などこれだけでは不足です。そこで ISO/IEC 646 では、0x23, 0x24, 0x5b~0x5e, 0x67b~0x7e は各国それぞれに必要な文字と入れ替えることができると決められました。日本では0x5cを¥に、0x7fを¯に割り当ててJIS規格としました。

なお、この国際基準版はASCIIと完全一致するよう1991年に変更されました。

ISO/IEC 8859

ISOとIECが合同で定めた、8ビット文字コードです。8ビットにした分、いろいろな文字を追加することができます。ただし、0x80から0x9fの間も制御コードとして文字を配置していません。

結局8ビットにしても各国の文字をすべて入れるのには足りず、いくつかのパートに分けられました。混合して使用する言語の組み合わせを考えて決めており複数ののパートに登録されている文字もあります。

英語、ドイツ語、イタリア語など日本人がよく目にする文字はISO-8859-1かその改訂版のISO-8859-15を使うことで網羅されます。

ISO-8859-1

やはり、41がA, 6Dがmと読む。左半分はASCIIと同じ。

1桁目→
↓2桁目
0123456789abcdef
0 0@P`p °ÀÐàð
1!1AQaq¡±ÁÑáñ
2"2BRbr¢²ÂÒâò
3#3CScs£³ÃÓãó
4$4DTdt¤´ÄÔäô
5%5EUeu¥µÅÕåõ
6&6FVfv¦ÆÖæö
7'7GWgw§·Ç×ç÷
8(8HXhx¨¸ÈØèø
9)9IYiy©¹ÉÙéù
a*:JZjzªºÊÚêú
b+;K[k{«»ËÛëû
c,<L\l|¬¼ÌÜìü
d-=M]m}­½ÍÝíý
e.>N^n~®¾ÎÞîþ
f/?O_odel¯¿Ïßïÿ

当然ながら1バイトで表現できない漢字をもつ中国、日本などの文字は規格になっていません。

しかし、1バイトで表現できる文字に限っても1バイトで全部を網羅できずにパートの切りかえの仕組みが必要になります。

この後、複数バイトを使い世界中の文字を切りかえ無しで表現するunicodeの策定が始まり、ISO/IEC 8859 の作業はここでとまっています。

ただ unicode を必要としない西洋のウェブページでは文字コードを指定する時には多くの場合 ASCII ではなく、ISO-8859-1かその改訂版のISO-8859-15を使っています。

ISO-8859-1とISO-8859-15の違い

大したことではない。一番大きいのはユーロの通貨記号です。

ISO-8859-1

ISO-8859-15

JIS X 0201

ISO/IEC 646 に基づき ¥ と ¯ を変更し、半角カナを加えたものです。ここには8ビットコードを書きましたが、7ビットで切り替えて使うものも定義されています。e列f列の「未」は未定義の部分です。8列9列は7ビットでは0列1列の制御コードと重なるので空けています。

濁点、半濁点は別になっていますので「ガ」は「カ」「゛」と2バイトで表現されます。

この半角カナは現在では漢字を含む文字コードの全角カナを使うのが望ましいとされています。

1桁目→
↓2桁目
0123 4567 89ab cdef
0 0 @P`p  
1!1 AQaq
2"2 BRbr
3#3 CScs
4$4 DTdt
5%5 EUeu
6&6 FVfv
7'7 GWgw
8(8 HXhx
9)9 IYiy
a*: JZjz
b+; K[k{
c,< L¥ l|
d-= M]m}
e.> N^n¯
f/? O_odel ソ