Unicode用語集

Unicode

Unicode文字集合や、後述のエンコード方式、正規化方式…諸々を定めたもの。

ただし、Windowsにおいて、“Unicode”がUTF-16 Little Endianのこととして使われたため、エンコード方式としばしば混同される。

UTF-8

最もよく使われる符号化方式。

1つのスカラー値あたり1 - 4バイトの可変長である。

CESU-8

一部のDBでは、BMP外の文字をサロゲートペアを残したままUTF-8に変換する方式として、CESU-8が定義されている。

上位サロゲートと下位サロゲートをそれぞれ3バイト・3バイトにエンコードする。

Javaのclassファイルでは、上記に加え、U+0000は0x00ではなく、0xA0 0x80にエンコードされる。

UTF-8では、このような表現は不正なシーケンスとみなされる。

UTF-16

WindowsやMacOS、Java、.NETなどの内部表現として使われている。

BMPの文字は、1コードポイントあたり16bitで表現するため、エンディアンの違いによる影響を受ける。

BMP外の文字は、サロゲートペアを使い、32bitで表現するため、固定長ではない。

UTF-32

1つのスカラー値を常に32bit使って表現する。

上位11bitは常に0のため空間効率は悪いが、コードポイントへの変換効率はよい。

Linuxではwchar_tの内部表現とする場合が多い。

BOM (Byte Order Mark)

UTF-16, UTF-32では、バイトオーダーによって表現が異なるため、ファイルの最初にバイトオーダーを示すためにBOMが挿入されることがある。

BOMには、U+FEFF (ZERO WIDTH NO-BREAK SPACE) が使用される。

また、UTF-8にもBOMと称して、0xEF 0xBB 0xBFの3バイトが挿入される場合がある。

UTF-8はバイトオーダーは関係ないので、BOMを挿入する必要はなく、また挿入すべきではない。

Windowsのメモ帳、ワードパッド、一部のテキストエディタがBOMを挿入するので注意が必要。

コードポイント

エンコード可能な数値の範囲。U+0000 - U+10FFFFの範囲にあたる。

スカラー値

コードポイントからサロゲートペアに使われる範囲を除いたもの。

U+0000 - U+D7FFと、U+E000 - U+10FFFFの範囲にあたる。