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を挿入するので注意が必要。