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」 |
- QAフレームワーク:仕様ガイドラインが勧告に昇格 (2005/10/21)
データベースの急速なXML対応に後押しされてか、9月に入って「XQuery」や「XPath」に関係したドラフトが一気に11本も更新された - XML勧告を記述するXMLspecとは何か (2005/10/12)
「XML 1.0勧告」はXMLspec DTDで記述され、XSLTによって生成されている。これはXMLが本当に役立っている具体的な証である - 文字符号化方式にまつわるジレンマ (2005/9/13)
文字符号化方式(UTF-8、シフトJISなど)を自動検出するには、ニワトリと卵の関係にあるジレンマを解消する仕組みが必要となる - XMLキー管理仕様(XKMS 2.0)が勧告に昇格 (2005/8/16)
セキュリティ関連のXML仕様に進展あり。また、日本発の新しいXMLソフトウェアアーキテクチャ「xfy technology」の詳細も紹介する
|
|