Unicodeという新しい標準

 Unicode(ユニコード)とは、16ビット(2バイト)をフルに使って65,536の升目を用意し、その空間にあらゆる文字を埋め込むことで、文字コードの切り替えという面倒な手続きなしに各国の文字を扱えるようにしようという考え方だ。もともとはISOが32ビットの多重言語文字セット規格UCS(Universal multiple-octet coded Character Set)をISO 10646として制定して、世界の文字を一括して扱う方法を構想していたのだが、アメリカの企業連合が進めてきた16ビットの案に歩調を合わせる形となった。現在ではISO 10646とUnicodeは実質的に同じものである。

 Unicodeは1つの文字コードで多国語の文字を一度に扱う。このため、Unicodeが普及すると、たとえば1台のコンピュータが特別なソフトなしで多くの言語を使えるようになる。また、すべての文字を16ビットで表すため、1バイト文字と2バイト文字の切り替えが無くなり、ソフトウェアの構造がシンプルになるというメリットも強調されていた。

 一方で、もともと6万数千文字分の空間に世界のあらゆる文字を埋め込むのは不可能な話なので、中国語、日本語、韓国語で用いる漢字の字形が似たものを統合して扱うなどの無理をしており、文化的にはいろいろな議論を呼んでいる。また、本来16ビットですべての文字を扱うとされていたにもかかわらず、既存のシステムとの互換性を残したいという理由から、Unicodeの中にもUTF-8、UTF-7など文字によって異なる長さで符号化するようなバリエーションが導入され(*注)、シンプルさのメリットには疑問符もつく。

 議論はさておき、パソコンの世界でも、Windows 98やMacOS 8.5ではUnicodeが本格的に採用され、今後は一般のソフトも徐々にUnicodeをサポートしていくようになると思われる。WWWブラウザでもメールソフトでも、Unicode対応をうたうものが登場してきた(16ビットのUnicodeは本質的に従来の電子メールとは相容れないので、UTF-7を使う)。しかし、いずれにしても誰もがUnicodeを読み書きできるようになるのはまだ先のことなので、手元のソフトの文字選択メニューにこれらのコードがあっても、当分は使わないほうが賢明だ。

(注)

UTF-8とは、ASCIIの部分は従来どおり1バイトで表して互換性を取りたいということから、他の文字を2バイト、3バイトと異なる長さで符号化するようにしたもの。漢字領域は3バイトになってしまうので、日本語を扱う場合は非効率になるが、プログラミングでは有利ということからJavaの文字コードとしても採用されている。RFC 2279を参照。

UTF-7は、ASCII部分以外の16ビットの文字を、Base64の変形版を使って7ビットで符号化したもの。RFC 2152を参照。

(第6章 p.197の注)

UCS-2はISO/IEC 10646のUniversal multiple-octet coded Character Set(UCS)を2バイトで符号化する方法で、Unicodeを文字番号どおりに16ビットで符号化したもの(ストレートUnicode)と同じ。一般に、単にUnicodeといえばこの16ビットの符号化を指す。ソフトウェアによっては「ユニバーサル文字」と呼ぶこともある。

他の符号化方法としては、1文字あたり4バイト(31ビット)を使った正規形式のUCS-4、Unicodeの特殊文字領域の一部を使ってUCS-2でカバーされない文字を4バイトで符号化するUTF-16がある。

『プロフェッショナル電子メール』第4章より