UTF-32とは
UTF-32(または
UCS-4)は、
Unicodeの符号化形式の一つで、各符号位置を固定長の
32ビットで表現します。これは、
Unicodeの各文字に一意の
32ビットのコードを割り当てることを意味します。
UTF-32の特徴
固定長: UTF-32の最大の特徴は、すべての文字が32ビットで表現される固定長である点です。これにより、特定の文字にアクセスするために複数回のアクセスが必要な可変長のUTF-8やUTF-16とは異なり、1回のメモリアクセスで文字情報を取得できます。
メモリ管理: この固定長という特性から、
UTF-32は主にシステムのメモリ上での管理や、符号位置数で管理する
データベースなどで利用されます。特に、メモリ上に配置する場合には固定長である
UTF-32が都合が良い場合があります。
データベース: 近年のデータベースでは、バイト数ではなく符号位置数で領域を確保する型が利用可能です。UTF-32はバイト数が固定であるため、物理サイズをディスク上に確保することが容易です。
サイズ: データサイズに関しては、他の
文字符号化方式と比較して大きくなります。また、文字列の表示幅の計算は、いくつかの特殊なケースを除いて容易ではありません。これは、
結合文字や
CJKV漢字のように、1つの文字位置が複数の符号位置で構成される場合や、1つの符号位置が複数の文字位置を占める場合があるためです。
利用頻度: これらの理由から、UTF-32はデータの交換にはほとんど使用されず、UTF-8やUTF-16がUnicode文書の通常の符号化スキームとして利用されています。
符号位置の表現: Unicodeの符号位置をテキストで表現する際には、通常、
UTF-32で扱った場合の16進数表記(例:
U+10001)が使用されます。
バイト順マーク: UTF-32は、テキスト形式で扱う場合には先頭にバイト順マーク (BOM) を付けます。BOMによって、リトルエンディアン(FF FE 00 00)かビッグエンディアン(00 00 FE FF)かを識別します。
プログラミング言語: プログラミング言語では、
UTF-32の指定に
大文字の
Uが使われることが多く、
C言語や
C++などでは、文字列
リテラルの前に
Uを置くことで
UTF-32として処理されます。
歴史
初期の
ISO/IEC 10646|ISO_IEC 10646規格では、
UCS-4という
31ビットの符号化
文字集合が定義されていました。
UCS-4では、各文字を0から7FFFFFFFの範囲の符号位置で表現していました。最上位ビットが1になる値を避けたのは、このビットをエスケープなどの目的で利用するためでした。
しかし、
UCS-4は1114112個の符号位置を持ち、
Unicode符号空間の全てを表現するには十分でしたが、より効率的な符号化方式として
UTF-32が提案されました。
UTF-32は、
UCS-4の部分集合であり、
32ビットの符号値を0から10FFFFの範囲のみで使用します。
当初、
UTF-32は
UCS-4規格の部分集合でしたが、後の規格では、すべての文字割り当てをBMP(
基本多言語面)または最初の14の
追加面に制限し、
私用面の一部を削除する方針となりました。
まとめ
UTF-32は固定長の符号化形式であり、メモリ管理や
データベースでの利用に適していますが、データサイズが大きいため、データ交換にはあまり使用されません。
UTF-8や
UTF-16がより一般的ですが、
UTF-32は内部処理や特定の用途で重要な役割を果たしています。
参考資料:
Unicode6.0.0/ch03.pdf'>Unicode Terminology English - Japanese (用語の日本語表記)
Unicode4.1.0/ch03.pdf'>The
Unicode Standard 4.1 (
UTF-32の公式な定義)
Unicode Standard Annex #19 (Unicode 3.x における UTF-32 の公式な定義)
Registration of new charsets: UTF-32,
UTF-32BE,
UTF-32LE (
UTF-32がIANA charset登録簿に追加されたことの告知)
関連情報:
*
Unicode#%E6%96%87%E5%AD%97%E7%AC%A6%E5%8F%B7%E5%8C%96%E6%96%B9%E5%BC%8F'>
Unicode#
文字符号化方式 (Wikipedia)