文字コード

Updated / Published

文字コード(Character Code)とは、文字を数値で表現する方法です。コンピュータは画像や文章などのすべてのデータを "0" と "1" の2進数の配列して構成しており、コンピュータ上で利用している文字には、それぞれに固有の数値が割り当てられ符号化されています。

コンピュータが文字を表現する際、"0" と "1" の配列とそれに対応する文字の対応表のようなものを作り、その規則に従って "0" と "1" だけでコンピュータ上では文字を表現しています。ここで "0" と "1" に対応させる元の文字の集合のことを文字集合(Coded Character Set)と呼び、文字に割り振られた数値をコードと呼びます。そして、文字集合にコードを対応させることを符号化する(Encoding)と呼びます。

ASCIIコードの誕生

コンピュータは元々欧米で発達してきました。欧米で用いられる文字はアルファベットと数字、記号、それに空白(スペース)や改行、タブ、コンピューターの制御記号などを加えて合計で128種類です。1963年に ANSI(アメリカ規格協会)が ASCII と呼ばれる1バイトの文字コードを制定しました。この ASCII では 7ビットの文字コードを規定しています。7ビットとは、"0" か "1" かという情報が7つ分ということで、2の7乗で128通りの文字が表せます(ただしコンピュータ内部では、ハードウェア的な制約から8ビットを使って文字を表現しています)。

Unicode(ユニコード)の誕生

日本人が扱う日本語では、漢字や平仮名、片仮名とたくさんの文字を扱います。コンピュータシステムは急速に多くの言語圏で利用されるようになり、ASCIIコードでは128種類という限られた文字しか表すことができなかったため、日本では日本語がコンピュータ上で表現できるように固有の文字コードが制定されました。もちろん、中国、朝鮮など他の言語を取り扱う国においても固有の文字コードが制定され、代表的な文字コードだけでも100種類以上存在します。

しかし、多様な文字コードの存在は文字コードの互換性の問題を引き起こしました。たとえば、ある文字コードで記録されたデータを別の文字コードに変換しようとするとき、一方で定義されている文字がもう一方では定義されていない(あるいは用途によって2種類の文字に分けられている)という問題です。

そこで、1987年頃から Xerox が開発していた文字コードに Apple, IBM, Microsoft, HP などの数社が賛同し、1991年にThe Unicode Consortium(ユニコードコンソーシアム)を起ち上げ、世界で使われる全ての文字を共通の文字集合にて利用できるようにしようという考えで、Unicode(ユニコード)を策定しました。そして現在、Unicodeはバージョンアップを重ねながら、数多くの言語の文字集合を収録し、広く利用されるようになってきています。

日本語の文字コード

日本語を扱うために制定された文字コードに代表的なものが4種類あります。ISO-2022-JP, Shift JIS, EUC-JP, UTF-8です。この4種類の内、ISO-2022-JP, Shift JIS, EUC-JPの3種類は、JIS X 0208という同じひとつの文字集合を参照しているのですが、それぞれ各文字に割り振られている数値のコードが異なります。当然、同じ文字集合でも各文字のコード(数値)が異なるので、ブラウザなどのソフトウェアを利用していて文字コードの指定を間違えると、文字集合にコードを対応させる符号化の際に文字化けが起こります。また、UTF-8 は、Unicodeで使える文字コードのひとつで、文字集合もJIS X 0208と異なるので、これも文字コードの指定を間違えると同様に文字化けが起こります。

ISO-2022-JP

ISO-2022-JPJIS(日本工業規格)が策定した文字コードであることから、俗に JIS(ジス)コードと呼ばれています。7ビット構成で、多くの文字集合が定義されており、文字集合の切替に ISO/IEC 2022 のエスケープシーケンスという特殊文字列を利用しています。インターネット上では日本語を扱う電子メールによく利用されていますが、ウェブページにはほとんど利用されていません。

Shift JIS

Shift JIS(シフトジス)は、Microsoft社が日本にパソコンを普及させるときにアスキーや三菱電機などと共同で策定したとされる文字コードです。Shift(シフト)というのは、JIS(ジス)コードを変更(シフト)して作成したことに由来します。JIS漢字コードでは、アルファベットや数字などの半角文字(1バイト文字)と漢字などの全角文字(2バイト文字)の切り替え作業や漢字を判別するためのスキャン作業で非効率的な部分がありましたが、Shift JIS は文字の1バイト目のデータを見るだけで漢字か半角英数字(ASCII)かを区別できること、さらに等幅フォント(固定幅フォント)で表示した場合に画面上の桁数とバイト数が一致するなどのメリットがあります。効率的に漢字データなどを扱えることから、Microsoft社の MS-DOS, Windows だけでなく、Apple社の Macintosh など、パソコンの標準文字コードとして広く普及しました。しかし、現在では世界各国の言語が扱えないこと、漢字表示の際2バイト目に非テキスト文字が出現するため処理にエラーが出やすいことなどから利用は減ってきています。IANA への登録名は Shift_JIS となっており、ウェブページで文字コードを指定する際も Shift_JIS と表記します。

EUC-JP

EUC(イーユーシー)とは、Extended UNIX Code(拡張UNIXコード)の略で、1980年代前半に日本語UNIXシステム諮問委員会が UNIX で日本語を扱うため AT&T に報告書を出し、AT&T で日本語を扱う EUC として EUC-JP(イーユーシー・ジェーピー)が策定されました。EUC の符号化に ASCII と JIS X 0208 の文字集合を配置したもので、半角カナ(JIS X 0201)と JIS補助漢字(JIS X 0212)も含むことができます。文字を構成する1バイトは7ビットで構成され、Shift JIS のように1バイト目で文字を種別することができます。ウェブサーバは UNIX(Linux)環境で構築されていることが多いため、ウェブサイトやCGIプログラムで EUC-JP が利用されています。

UTF-8

UTF-8(ユーティーエフ・ハチ)は、Unicode で使える文字コードのひとつで、正式名称を Unicode Translation Format-8(ユニコード変換フォーマット8)といいます。UTF-8 は、Unicode を元に、1文字を1バイトから6バイトの可変長バイトで表現したものです。日本語、中国語、台湾語の漢字を同一に扱うことができるので、国際的な情報を扱うのに優れています。しかし、日本語などの元々2バイトで表現できた文字が UTF-8 では3バイトや4バイトで表現されてしまうため、他の文字コードに比べてデータサイズが大きくなります。UTF-8 ではバイトの順序を示すためにファイルの冒頭に BOM というコードを付けることがあります。これは、ユニコードコンソーシアムで策定された類似の UTF-16 の文字コードのためにできたものですが、UTF-8 のファイルにも利用されることが多くなっています。この際、BOM ありの方をそのまま UTF-8、なしの方を UTF-8N と呼ぶこともありますが、このような使い分けは日本以外ではほとんど知られておらず、また公的規格などによる裏付けも行われていません。