UTF-8とUTF16の違いは?
XML文書で使える漢字コードとして、UTF-8とUTF-16というのがありますが、この2つはどのように違っているのですか? 使い分ける必要はありますか?

回答/富士ソフトABC株式会社 技術センター
2001/9/14

 UTF-8とUTF16の違いを一言でいうと、文字を表現するときの単位が違います。UTF-8は8ビットの可変長マルチバイトで文字を表現し、UTF-16は16ビットの可変長マルチバイトで文字を表現します。

 それぞれの定義については以下のように少し難しい表現が使われています。

UTF-8 (8-bit UCS Transformation Format)
UCS-2で定義される文字集合を用いて記述された文字列をバイト列に変換する方式の1つ。1文字を1〜6バイトの可変長マルチバイトに変換する。
UTF-16 (16-bit UCS Transformation Format):
UCS-2で定義される文字集合を用いて記述された文字列に、UCS-4の一部の文字を埋め込むためのエンコード方式。UTF-8と併用することができる。UCS-2で利用できる文字数を大幅に増やすことができる。

 上記で使われているいくつかの単語について以下で説明します。

 UCS-2 (Universal multi-octet Character Set 2)とは、Unicodeとほぼ同じもので、UCS(Universal multi-octet coded Character Set)の中のある特定の部分を指し示すものです。UCS-4の群00の面00に配置され、2バイトの値として定義されています。世界の主要な言語で使われる文字のほとんどを収録しています。

 UCSとは、実際にはUCS-4 (Universal multi-octet Character Set 4)のことで、UCS-2はUCS-4の一部のことです。UCS-4は4バイトの値で定義され、上位のバイトからそれぞれ群、面、区、点と呼ばれます。現在は群00の面00で定義されているUCS-2のみに文字が配置されていて、それ以外の空間には文字は配置されていません。

 そしてUTF (UCS Transformation Format)とは、UCS-2で定義される文字集合を用いて記述された文字列を、コンピュータが扱いやすいようにバイト列に変換する方式です。UCS:ISO/IEC 10646-1として定められた国際文字集合では、世界の主要な言語で使われる文字のほとんどを収録しています。

 UTF-16の場合、2バイトで表現できる文字(0x0000〜0xD7FF、0xE000〜0xFFFF)はそのまま2バイトで表し、それ以降(0x00000000〜0x0010FFFF)の文字は4バイトで表します。このため英数も日本語も全て2バイトで表現されます。しかし、UTF-8は英数は1バイトで表現し、日本語は3バイトで表現するようになっています。

 つまり、英数の割合が多い場合はUTF-8の方が効率が良いのですが、日本語が多い場合はUTF-16の方が効率が良いといえます。また、世界的に見ればUTF-8を標準として使用することが多くなっています。具体的にみると、Windowsでは状況によってUTF-8とUTF-16を使い分けていますし、DNSなどの文字列にはUTF-8を使用し、ほかではUTF-16を使用する、といった形の使い分けをしています。

 結論としては、どちらを標準として使用するではなく、状況と目的、さらには将来的な観点から使用する文字コードを使い分けることが必要となります。

■2001/9/18更新 後半のUTF-8とUTF-16の使い分けについての説明を追加。

「Ask XML Expert」


XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間