10.5 文字コード
コンピュータの中では,様々な情報は2進数によって表され,デジタル情報として扱われます.ここでは,文字情報がコンピュータ内でどのように扱われているのかについて,具体的に見てみましょう.
コード化
コンピュータ内では,文字情報は数値と対応づけることによって表現されます.文字情報を数値と対応づけるということは,どのようなことなのでしょうか.例えば,アルファベットを0から25までの数値に順番に当てはめていくことによって,アルファベットを数値として扱うことができます.実際のコンピュータでは,対応づけされる数値としてはコンピュータが理解することのできる2進数が使われます.また,数値と対応づけられる文字情報には,アルファベット以外にも数字や記号,空白や改行(機能コード)が含まれます.
このように,文字に限らず情報を数値に対応づけることをコード化と言います.また,コード化された記号全体をコード系と呼び,通常は表の形でまとめられます。この表のことを、コード表といいます.下の図は,ASCII7ビットコード表と言われるものです.
\ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
0 | Null | DLE | 空白 | 0 | @ | P | ` | p |
1 | SOH | DC1 | ! | 1 | A | Q | a | q |
2 | STX | DC2 | " | 2 | B | R | b | r |
3 | ETX | DC3 | # | 3 | C | S | c | s |
4 | EOT | DC4 | $ | 4 | D | T | d | t |
5 | ENQ | NAK | % | 5 | E | U | e | u |
6 | ACK | SYN | & | 6 | F | V | f | v |
7 | BEl | ETB | ' | 7 | G | W | g | w |
8 | BS | CAN | ( | 8 | H | X | h | x |
9 | HT | EM | ) | 9 | I | Y | i | y |
A | LF | SUB | * | : | J | Z | j | z |
B | VT | ESC | + | ; | K | [ | k | { |
C | FF | FS | , | < | L | \ | l | ¦ |
D | CR | GS | - | = | M | ] | m | } |
E | SO | RS | . | > | N | ^ | n | ~ |
F | SI | US | / | ? | O | _ | o | DEL |
ASCIIコード表では,文字情報を7桁の2進数(128通りのビットパタン)に対応づけています.これは,このコード表では2の7乗個,即ち128個の文字情報を区別し,表すことができるということを意味しています.ASCIIコードは日本語には対応していませんが,例えばアルファベットに加えて半角カタカナを扱おうとすると,7ビットでは足りません.JIS X 0201と呼ばれるコード系では,文字情報を8ビットのビットパタン(256通りのビットパタン)に対応づけることによって,アルファベットに加えて半角カタカナをも扱えるようになっています.
文字のコード化は,文字記号の少ないアルファベット圏では比較的容易ですが,漢字圏のように多数の文字があるところでは様々な問題があり,困難です.どの文字を採用するかを考えることも大変ですし,採用した文字と数値(ビット列)の対応づけも面倒な作業になります.加えて,後で文字を追加するときには,先に作られたコード系といかに整合性を保つかといった多くの作業をこなさなければなりません.
コード表の読み方
図のASCII7ビットコード表とは,その名のとおり7ビット,すなわち128通りのビット列一つ一つに記号を割り当てたものです.上側の0〜7の16進数(→4.2 情報量)は上位3ビット,左側の0〜Fの16進数は下位4ビットを表しています.表を見ると,例えば大文字のAは16進数では41,すなわち2進数では1000001というビット列に対応しています.つまりこのコード系に基づいた場合,コンピュータにとって大文字のAは1000001というビット列として扱われます.
また,「CR」や「DEL」など,見慣れない文字列があります.これらは文字ではなく,コンピュータに特定の機能を実行させる役割が割り当てられた機能コードです.例えば,BS(Back Space)は「一文字後退」を,CR(Carriage Return)は「行頭復帰(カーソルを,カーソルが位置する行の先頭に移動させる)」を意味しています.
マルチバイトコード系
高機能なコンピュータが低価格で手に入るようになり,ますますコンピュータが日常的になってくると,日本語処理でも本格的な漢字の利用が始まりました.アルファベットをはじめとする文字記号を表すためには7ビットが,アルファベットに加えて半角カタカナを扱えるためには8ビットが必要でした.漢字の文字数は数万にのぼるため,現状ではその一部のコード化が行われているにすぎませんが,それでも実用的に漢字を扱うには8ビット=1バイト(256パタン)ではとても足りません.そこで,漢字のコード化は16ビット=2バイト(65536パタン)で処理されることになりました.漢字を取り扱うコード系としては,iso-2022-jp,SHIFT_JIS,EUC-JPの3種類がよく使われています.
文字化け
次のリンクを開いてみましょう.
→文字化けページこのように,正しく文字が表示されないことを文字化けと言います.皆さんも,Webページを閲覧しようとしたら文字化けしていて読めなかった,という経験があるかもしれません.
文字化けは,漢字を扱うためのコード系が複数混在していることによって生じます.通常は,ブラウザの設定で文字コードを適切に設定することによって直すことができます(→1.3 ブラウザの使い方).
● 練習問題
- 先ほどの文字化けページを開き,ブラウザの設定を変えることによって文字化けを直しなさい.
- SHIFT_JISコードに従って日本語で書かれたテキストファイルがあります.ファイルの容量は12キロバイトです.このファイルに書かれた文字数はおよそ何文字程度でしょうか.計算してみましょう.
- ASCIIコード表では,アルファベットの「P」はどのようなビット列(7桁の2進数)に対応づけられているでしょうか.
- 機能コード,記号,アルファベット,カタカナ合計191文字を扱うためには何ビットの情報量が必要となるでしょうか.
HTMLの文字コード指定について
文字化けを起こさないために,CNSでHTMLファイルの編集を行う際には,head要素の中に以下の一行を挿入します.
<meta http-equiv="Content-Type"content="text/html; charset=ISO-2022-JP" >