| |||||
|
UTF-8って何?
by Akira Kato
July 13, 2003
UTF というのは Unicode (または UCS) Transformation Format の略語です。 UCS は Universal Character Set の略語で、ISO 10646 の文字集合を表しています。 Unicode と UCS は、ほぼ同じものです。 ISO というのは International Organization for Standardization の略語です。日本では、国際標準化機構と訳されています。世界118ヵ国が加盟している組織で、工業製品の国際規格化を目標として活動しています。 ISO 10646というのは、この組織で決められたものです。コンピュータを使って文字を表現するときに、世界のどの国の言葉も、 もれなく、表現できるようにということで集められた文字集合体です。 しかし、コードには限りがありますから、すべてというわけには行きません。このことも含めて、Unicode については、 このページ (ユニコードって何?) で詳しく説明しているので、リンクをクリックして読んでください。 新しいウィンドーが開きます。このページへ戻るには、新しいウィンドーを閉じてください。
UTFにも、いろいろありますが、代表的なのが UTF-8 と UTF-16 です。この2つの違いを一言でいうと、 文字を表現するときの単位が違います。UTF-8は8ビットの可変長マルチバイトで文字を表現します。 上の図は、2進法で表示されています。つまり、実際に、コンピューターのメモリーの内部では、このように0か1かの組み合わせで、 すべての文字が表現されているわけです。 右側が UTF-8、左側が、UCS-4 (後ほど説明します。) です。一番上の段を見てもらうと分かると思いますが、これが UTF-8で表現することのできる、最小の単位です。つまり、1バイトです。よく見ると分かるとおり、8ビットからなっています。 このようにして、UTF-8では、1バイトで文字を表現する場合もあるし、また6バイトで表現する場合もあるということです。 一方、UCS-4は、上の図で見ると分かるように、常に4バイトで文字を表現しています。 UTF-16は、8ビットを単位とするのではなくて、その2倍の16ビットを最小単位として文字を表すやり方です。
2進法で表示すると、人間の目には分かりにくいので、16進法で、上のように表すのが普通です。 UCS-4は4バイトの値で定義され、上位のバイトからそれぞれ群、面、区、点と呼ばれます。 UCS-2 (Universal multi-octet Character Set 2)とは、Unicodeとほぼ同じもので、 UCS(Universal multi-octet coded Character Set)の中のある特定の部分を指し示すものです。 UCS-4の群と面に配置され、2バイトの値として定義されています。世界の主要な言語で使われる文字のほとんどを収録しています。 UCSとは、実際にはUCS-4 (Universal multi-octet Character Set 4)のことで、 UCS-2はUCS-4の一部のことです。 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を使用する、といった形の使い分けをしています。 つまり、どちらを標準として使用するか、ではなく、状況と目的、 さらには将来的な観点から使用する文字コードを使い分ける必要があるわけです。 こうして、ゴタクを並べ立てたのでは、ちっとも面白くないので、上の図に示してある数値を使って、実際に文字を表してみます。   슀 슀 � � � � � � � � � � 右上の表に列記された数値を、コードにして書くと上のようになります。左端に示したのが、そのコードによって実際に表示される文字です。 おそらく、クエスチョン・マークがたくさん並んでいることでしょう。これは、どういう意味かというと、まだ、このコードに文字が割り当てられていないか、 割り当てられている場合には、あなたのシステムに、その文字を表示する特別なフォントがないために、表示できないかのどちらかです。 ちなみに、私の名前をユニコードを使って漢字で書くと次のようになります。
加 藤 明 加 藤 明 どうしたら自分の名前の漢字コードが分かるのだろうか?と思っているんじゃありませんか? もしコードを知りたいのであれば、このページ (ユニコードって何?) を見てください。
| ||||