このページをはてなブックマークに追加このページを含むはてなブックマーク このページをlivedoor クリップに追加このページを含むlivedoor クリップ

目次

文字集合

 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漢字コードに分類できる。

  • JIS8単位コード
    • 英数字とカタカナを8ビットで表す。
  • JIS漢字コード
    • 漢字を16ビットで表す。

 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にはいくつかの種類がある。
    • JavaではUTF-8が採用されている。

分類

 Unicodeのコーディング方法は、次の4つの方法がある。

  • UTF-8
    • 128文字分を1バイトで表現する(ASCII文字)。
    • 1,920文字を2バイトで表現する(アラビア文字など)。
    • 63,488文字を3バイトで表現する(中国語や日本語など)。
  • UCS-2
    • すべての文字を2バイトで表現する。
  • UTF-16
    • UCS-2の拡張。
  • UCS-4
    • すべての文字を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の絵本』