目次 †
文字集合 †
PCで文字を表現するときは、「符号化」と呼ばれる文字とコードの対応付けが必要である。これらをある基準にしたがって集めた表を文字集合と呼ぶ。
ちなみに、日本語の文字集合はJIS規格によって定められている。
文字コード †
PCは、文字を文字コード(キャラクタコード)という番号で管理している。
各種文字コード †
EBCDICコード(拡張BCDコード、拡張BCD交換用コード) †
- 汎用コンピュータ用文字コードのデファクトスタンダードである。
- IBMによって規格化された。
- 「EBCDIC」は「エビシディック」と読む。
- BCDICと呼ばれる所期の6ビットコードの拡張。
- IBMのパンチカード用のコードに由来している。
- この様式のパンチカードは80文字のテキストを保存でき、1928年にIBMによって導入されて以来、50年以上も使われ続けた。
- 8ビットEBCDICコードは高位ニブル(4ビット値)と低位ニブル(4ビット値)で構成されている。
- 低位ニブルは文字の数字パンチに対応するBCDコードである。
- 高位ニブルは文字のゾーンパンチに対応するコードである。
- 数字0〜9に対してはゾーンパンチがない。そのパンチがないことが高位ニブル1111に対応している。
ASCIIコード †
1文字をISOコードにパリティビットを付けた8ビットで表す文字コード。ANSI(米国規格協会)によって規格化された。基本となるASCII(アスキー)文字コード表は、0から127までの番号からなる。
例:C言語で次のようにすると、変数chには英数字「A」に相当する文字コードである65が代入される。
ch='A';
ISOコード †
英数字1文字を7ビットで表す文字コード。ISOによって規格化された。
JISコード †
ISOコードを元に定めた文字コード。JISによって規格化された。文字集合をエスケープシーケンス(「ESC(B」といったコード列)によって切りかえる文字コードである。
JISコードは、さらにJIS8単位コードとJIS漢字コードに分類できる。
JISコードは、通信を通してデータ転送をするときに使われている。例えば、Eメールなどがある。
ASCII文字と全角文字をエスケープシーケンスと呼ばれる特別なコードで切り替える。これによりデータが大きくなるというデメリットがあったが、これはシフトJISで解消された。
例:「1b 24 42 82 A0 1b 24 42 4c 69 6e 75 78」
- 「82 A0」:「あ」という2バイト文字を表す。
- 「4c 69 6e 75 78」:「Linux」を表す。
シフトJISコード(MS漢字コード) †
JIS8単位コードの未定義部分に漢字コードの上位8ビットを割り当てた文字コード。米マイクロソフト社によって規格化された。JIS漢字コードよりも扱いやすいため、多くのPCで採用されている。2バイト文字の1文字目(8ビット)が1バイトカナ文字のエリアと重ならないように、JISコードを移動(シフト)させたものである。WindowsやMac OSなどで利用されている。
ASCIIコードで使われていない領域に、半角カナおよび漢字コードの1バイト目を割り当てている。これによって、全角・半角を認識している。
EUCコード(拡張UNIXコード) †
漢字などの2バイト文字を扱うことができるように拡張した文字コード。米AT&T社によって規格化された。文字集合の切り替えに8ビット目を利用する。UNIXで利用されている。
Unicode †
- 世界中の主要な文字を一括して扱うことを目指して作られた規格。すべての文字を2バイトで表す。ISOによって規格化された。
- 例えば、Windows NTやMac OS 8で使用されていたり、新しいブラウザなどで使用されていて、徐々に普及している。
- ASCIIコードでは1文字を1バイト(=8ビット)で表すため、256(=22)種類の文字しか扱えない。欧米ではアルファベットに数字・記号を合わせても100種類程度なので対応できるが、日本語のようにひらがな・カタカナ・漢字まで扱うことはできない。
- そこで1文字を表すのに2バイト(=16ビット)を用いるUnicodeが使われる。Unicodeならば65,536(=256×256)種類の文字が扱える。
- しかし、実際に2バイトでも文字をすべて表現できないため、似たような漢字は同一の文字とみなすハンユニフィケーションや、2文字で1文字を表すサロゲートペアという方法を用いている。
- Unicodeをテキストデータとして入出力するときに用いるフォーマットをUTF(Unicode Text Format)という。
- UTFにはいくつかの種類がある。
分類 †
Unicodeのコーディング方法は、次の4つの方法がある。
- UTF-8
- 128文字分を1バイトで表現する(ASCII文字)。
- 1,920文字を2バイトで表現する(アラビア文字など)。
- 63,488文字を3バイトで表現する(中国語や日本語など)。
- UCS-2
- UTF-16
- UCS-4
日本語対応 †
日本語対応の要件として次が挙げられる。
- 日本語の表示が可能。
- 日本語の入力が可能。
- 日本語の文章の印刷が可能。
- 日本語の文章の送受信が可能。
- プログラム内で日本語の使用が可能。
UNIXにおいて、どのコード体系が使われているかどうか調べてみる †
UNIXでは、一般的に日本語コードとしてECUとシフトJISコードが使われる。odコマンドで「亜」という漢字の16進数を確認することができる。その値の結果より、どの文字コードを利用しているかがわかる。ちなみに、「亜」は、漢字の中で一番小さな値をもっている。
% echo 亜 | od -cx
b0a1 ←「亜」はEUCでB0A1h
% echo 亜 | od -cx
889f ←「亜」はシフトJISコードで889h
% echo 亜 | od -cx
3021 ←「亜」はJISコードで3021h
参考文献 †
- 『1週間で分かる基本情報技術者集中ゼミ【午前編】 2006春秋』
- 『アスキー・ラーニングシステム 応用UNIX』
- 『図解でわかるLinux』
- 『新C言語入門 スーパービギナー編』
- 『インターネット屋根裏探検隊』
- 『Linux Magazine 2000,3月号』
- 『DOS/V SPECIAL 2003,February』
- 『Javaの絵本』