2000/03/07
今回から数回に渡り、文字コード、とりわけ日本語の漢字コードの話をする。この話は厳密にやろうとするとなかなか複雑で、もしかしたら私の知識も不正確な部分があるかも知れないが、所謂「文字化け」のことなど、誰もが一度は遭遇する問題ではあるので、誤解を恐れずにまとめてみる次第である。
コンピュータは、煎じ詰めれば0と1(2進法)しか理解できず、従ってどんなデータでも内部ではすべて0と1の羅列が処理されているにすぎない。しかし人間が使う自然言語は、それではあんまりにも冗長でわかりにくいので、0と1の羅列をいくつかまとめて、そのひとまとまりを自然言語のキャラクタと対応づけることによって、理解しやすいようにしている。その対応付けのルールを「文字コード」という。
ちなみに2進法の1桁を1bitと言う(厳密な定義は違うのだが)。従って 2bit の世界では 00、01、10、11 の4種類の並びで文字が表現できるし、4bitならば2の4乗で16種類、n-bit あれば 2のn乗の種類の文字が表現できる。
このようにして0と1の並びを何bit分かまとめて考えると、例えば7bitあれば2の7乗=128種類の文字が表現できるので、英語圏であれば、アルファベットの大文字小文字や数字に、記号を入れてもおつりができる。そこで、7bitで1文字を表現するために定められたのがASCIIコードと呼ばれるものである。そして、ASCIIコードで表現できる文字をASCII文字と言う。例えば、「0」という文字は2進法で 0110000、(上位4bitと下位4bitに分けて3/0というように書いたりもする)に割り当てられている。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |
0 | BEL | BS | TAB | LF | FF | CR | SO | SI | ||||||||
1 | ESC | |||||||||||||||
2 | SPC | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / |
3 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
4 | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
5 | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ |
6 | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
7 | p | q | r | s | t | u | v | w | x | y | z | { | | | } | 〜 | DEL |
なお、LFとかFFとかTABというのは制御文字と言って、改行とか改頁とかタブなど、テキストを見やすくするために入る文字である。
さて、7bitだけのASCII文字で事足りる英語圏の人にとってはそれでいいのだが、コンピュータが全世界に普及するようになると、英語圏以外の人から「俺の国の文字もコンピュータで扱えるようにしたい」という当然の欲求が出てきた。ご存知の通り、世の中には英語圏のアルファベットだけでは表現できない言語がいくつもある。ドイツ語やフランス語にはウムラウトやセディーユがあるし、日本語にはひらがなやカタカナがあるし、韓国にはハングルがあり、ましてや中国の漢字なんてそれこそゴマンとあるわけで、とても先の高々128種類しかないASCIIコードだけではやってられないわけである。
そこでまず、それらのASCII文字以外の文字を扱うための文字セットというものがISO(国際標準化機構)によって定められた。文字セットには、ドイツ文字、スウェーデン文字、ギリシア文字、キリル文字など数十種類くらいある。また、漢字やハングルなどは7bit128文字では到底表わせないので、2byte以上で1文字を表すことにした。これらは「マルチバイト・キャラクタ」と呼ばれている
そして、これらの文字セットをコンピュータで扱うための「文字コード」がいろいろに考え出され、混迷が始まるのであるが、その話は次回以降に。いやはや、ややこしい話が続いて申し訳ない。これからもっとややこしくなるのであるが。