トップページソフトウェア系

文字コード(もじコード、英: character code)は、文字や記号など(キャラクタ)を通信やコンピュータで扱えるように、一文字一文字に固有の識別番号を与えて区別できるようにした、その対応関係についての規則体系(コード ※)のこと。 世界中の様々な言語の膨大な数の文字に全て(できうる限り全て)に通し番号を割り当てひとつのコード体系で使用できるようにすることが構想されるようになり、Unicode(ユニコード)が実現した。

符号化文字集合と文字符号化方式

これまで自分はコンピュータの中の文字というものを、

「文字コード」という一つの概念として捉えてしまっていた。

しかし、実際には符号化文字集合と文字符号化方式という二つの概念が存在し、

これらが組み合わさってコンピュータの文字というものを表しているということを知った。

符号化文字集合

まず符号化文字集合について。

文字を表現するためには、まずは文字の集合が必要である。

またコンピュータでそれを表すためには、それぞれの文字に一意な番号をふって置く必要がある。

例えば、スペースなら32番、「a」なら97番という感じ。

番号をふっておけば、その番号に従って、ディスプレイ上に文字を表示することができる。

この番号のことを、便宜的にこの記事では「コードポイント」と呼ぶ。

ASCIIやJIS、Unicodeなどは符号化文字集合である。

文字符号化方式

次に文字符号化方式について。

文字符号化方式は、複数の符号化文字集合を組み合わせる、

過去への互換性を保つ、などといった要件を達成するための運用方式のこと。

符号化文字集合を運用しやすいように別のバイト列に変換する方式のことである。

Shift_JIS、UTF-8、UTF-16などは文字符号化方式である。

例えばJIS系の文字集合を符号化する方法がShift_JISであり、

Unicodeの文字集合を符号化する方法がUTF-8やUTF-16である。

符号化文字集合と文字符号化方式の関係

符号化文字集合と文字符号化方式の関係は図にしてみると分かりやすい。

イメージ図のため少し正確さにはかけるが、こういうイメージ。

上のように「あ」を例にしてみる。

「あ」はUnicodeのコードポイントでは「U+3042」である。

これをUTF-8で符号化した場合、

「0xE3 0x81 0x82」というバイト列になる。

これをUTF-16で符号化した場合は、

バイト列はUTF-8と違い、「0x30 0x42」となる。


Unicodeは世界中の文字を一つの文字集合にまとめるという思想なので、

文字集合は一つになっている。

EUC-JPの場合はASCIIとJIS X 0208、JIS X 0201、JIS X 0212

の4つの文字集合を扱うので、

この切替もEUC-JPという符号化方式によってなされている。

BOMとエンディアン

UTF-8(正式名称は、ISO/IEC 10646では “UCS Transformation Format 8”、Unicodeでは “Unicode Transformation Format-8” という)では、1文字を1byteで表すのでエンディアンは関係ない。

Tweet