燈明日記 このページをアンテナに追加 RSSフィード

ごあいさつ

燈明日記へようこそ!!

燈明日記の主なテーマは、以下の通りです。

そして、燈明日記へ来られたのも『私』と『あなた』の何かのご縁です。なので、どうぞごゆっくりご覧下さい!


2007/6/22(金)

[][] Unicodeの概略を理解する

本来、UnicodeのUniは一つを表すことなのに、複数のUnicodeがあるみたいですね。

また、最近のPerlではutf8とか、VB2005では内部コードにUnicodeを採用しているとか…。

ということで、Unicodeがよくわからないので、今回、調べてみました。


Unicodeとは

まず、ユニコード(Unicode)はUCS-2(Universal Character Set coded in 2 octets)と称されています。

基本的に世界の文字を2バイト(16ビット)で表現しようとしている(現在では、21ビットの文字集合として規定されている)。

しかし、コードは一つですが、文字符号化方式により、UTF-16,UTF-8,UTF-7,UTF-32等の約4種類があるのです。

そう、あくまでもUnicodeは一つなのです。複数のUnicodeがあるわけではなく、複数の文字符号化方式があるのです。


UTFとは

文字符号化方式(UTF)とは、UCS-2として定義されたコード文字をビット列としてどのように表現するかの方式です。

つまり、コードは1つだけど、それをコンピュータ内部表現では複数の方式で表現することが可能で、Unicodeは実際そうしてるのです。


UTF-16とは

UTF-16は、コード1文字を常に16ビットで表す文字符号化方式で、通常、文書の始めにBOM(Byte Order Mark)を付けます。

BOMがU+FEFFの時はビックエンディアンで、U+FFFEの時はリトルエンディアンになります。

ビックエンディアンはコードと同じバイト列で、リトルエンディアンはコードの上位バイトと下位バイトが入れ替わったバイト列です。

たとえば、コード0x0041(2バイト)の文字は、ビックエンディアンでは0x0041で、リトルエンディアンでは0x4100のなります。

ビックエンディアンは、TCP/IPネットワークで採用され、リトルエンディアンはWindowsXP(VB2005)で採用されています。


16ビットに割り当てられなかった漢字は、サロゲートペアと言う拡張仕様で、32ビットで表現する。

しかし、このケースにあたる漢字は、JIS第3第4水準の一部とのことです。


UTF-8とは

UTF-8は、コード1文字を1バイトから3バイトの範囲で符号化する方式です。

1バイトの時はASCIIコードで、3バイトの時は漢字等になります。

IEブラウザや最近のPerlでは、これに対応しています。

つまり、ASCIIコードが多い文書ではUTF-16よりバイト数が少なく、漢字が多い文書では、バイト数が多くなります。


UTF-7とは

UTF-7は、UTF-16で表したUnicodeをBase64で変換して表す方式です。(あまり使われていない)


UTF-32とは

UTF-32は、コード1文字を常に32ビットで表す符号化方式。(現在、ほとんど使われていない)


まとめ

VB2005では、UTF-16のリトルエンディアンが標準。

Perlで漢字を処理するには、UTF-8が時代の流れらしい。


参考

http://ja.wikipedia.org/wiki/Unicode

http://homepage1.nifty.com/nomenclator/unicode/ucs_utf.htm

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証