かつてコンピュータで用いられる文字コードは、メーカー同士だけでなく、コンピュータごとに異なっていました。IBM内部でさえ9種類の方言があったそうです。そのため、1963年、アメリカでASCII(American Standard Code for Infomation Interchange、米国標準文字コード表)が制定され、1967年、ISO(International Organization for Standardization、国際標準化機構)がASCIIをほぼそのまま取り込んでISO 646を制定しました。このISO 646を元に、各国で独自の文字コードが制定され、それを取り込む形でISO 2022が誕生しました。日本語の電子メールでは、このISO 2022をベースにしたISO 2022-JP(「ISO」が頭に付いていますが、ISOが制定したものではありません)が一般的に用いられています。
その後、各国の文字を統一したコード表が数多く登場しますが、それらについてはここでは割愛します。Unicodeはそうしたコード表の一つとして誕生しました。このUnicodeを取り込む形で制定されたのがISO 10646です。ISO 10646はUCS(Universal Coded-Character Set、万国符号化文字集合)とも呼ばれます。
Unicodeはもともと内部コードとして構想されていたものです。そのため、インターネットを始めとするネットワークで使用する際、UTF(UCS Transformation Format、UCS変換形式)と呼ばれる変換方式によって別符号に変換しておかなければなりません。
UTFには様々な方式があります。UTF-1に始まり、UTF-7、UTF-8、UTF-16などがあります(そのすべてがネットワークで使用されるものではありません)。現在では、アメリカが押し切る形でUTF-8がUnicodeの符号化方式の本命となりました。
UTF-8は、ASCIIとの互換性を維持したまま、ASCII以外の文字を2〜6バイトの不定長符号に変換する方式です。 1〜4バイトの不定長符号に変換する方式です。
(2007.9.14 追記)1998年1月に制定された旧UTF-8(RFC2279)では1〜6バイトの不定長符号に変換する方式でしたが、2003年11月に制定された1〜4バイトの不定長符号に変換する方式の新UTF-8(RFC3629)への移行に伴い、廃止されました。
32〜127(0020-007F)0〜127(0000-007F)のASCII(Unicodeでは基本ラテン)は1バイト(8ビット)で表す。- 128〜2,047(0080-07FF)は2バイトで表す。
2,048〜65,535(0800-FFFF)は3バイトで表す。2,048〜55,295(0800-D7FF)及び57,344〜65,535(E000-FFFF)は3バイトで表す(55,296〜57,343(D800-DFFF)はサロゲート領域のため、使用禁止)。- 65,536〜1,114,111(010000-10FFFF)は4バイトで表す。
上記の通り、UTF-8では、日本語は3バイトで表されます。そのため、CGIなどでUTF-8を用いる際には注意が必要です。詳細については「文字コードに関する覚え書きと実験」の「UTF-8形式 (UTF 8-bit)」等を参考にしてください。
(注)下の表は、スタイルシートが適用されていない環境ではこちらの意図した表示になりません。