UTF-32

UTF-32（およびUCS-4。#歴史を参照）は、Unicodeの各符号位置に32ビット符号単位 1つだけを使う、固定長のUnicodeの符号化形式および符号化スキームである。他の UTF（）はすべて符号位置によって符号単位列の長さが変化する可変長であるため、UTF-32はもっとも単純なUTFであるとみなせる。
UTF-32は、テキストファイルで使用されることは少なく、主にシステムのメモリ上での管理や、符号位置の数で管理するデータベースなどで使用される。
概要.
一般にシステムが文字を扱う場合には、必要な1つの符号位置にアクセスすることで文字情報（グリフの形状や文字の持つ意味など）を取得する。UTF-32の場合は対象の1領域のみアクセスすることで対象となる文字情報を得ることができるが、可変長のUnicode形式では1つの符号位置を特定するために複数回のアクセスが必要となる。そのため、アクセス対象のメモリ上に配置する場合には固定長であるUTF-32が使用されることがある。
昨今のデータベースでは、バイト数ではなく、符号位置の数で領域を確保できる型を利用できる。符号位置数の型では他のUnicode形式では固定のバイト数を確保できないが、UTF-32の場合にはバイト数が固定であるため物理サイズをディスク上に確保することが可能である。
データのサイズで見た場合、他の文字符号化スキームと比較するとサイズは大きくなる。また文字列の表示幅の計算も、非常に限られた場合を除いて全く簡単にはならない。なぜならば、“固定幅”フォントを使った場合でさえ、 1つの文字位置に対して複数の符号位置が存在するかもしれない（結合文字など）し、 1つの符号位置に対して複数の文字位置を使うかもしれない（CJKV漢字など）。結合文字があるので、エディタは 1つの符号位置を編集時の 1単位とみなすこともできない。
これらの理由から、データの交換などの場合には、UTF-32はほとんど使われず、UTF-8やUTF-16がUnicode文書の通常の符号化スキームとして使われている。
なお、特定の文字がUnicodeでどの符号位置になるかをテキストで表現する場合には、codice_1などのように、UTF-32で扱った場合の16進数表記が使用されることがほとんどである。
テキスト形式で扱う場合、UTF-32は先頭にバイト順マーク (BOM) をつける。先頭の4バイトの並びが codice_2 ならリトルエンディアンとなり、codice_3 ならビッグエンディアンとなる。
プログラミング言語においては、UTF-32の指定には大文字のUを利用することが多く、C言語 (C11) や C++ (C++11) などではそれを文字列リテラルの前に置くことでUTF-32として処理されるようになる。
歴史.
最初のISO/IEC 10646規格は、UCS-4と呼ばれる31ビットの符号化文字集合を定義していた。この形式では、UCSに含まれるおのおのの符号化された文字は、32ビットで扱いやすい0–7FFFFFFFの符号位置で表現される。
最上位ビットが1になる値を避け、32ビットではなく31ビットとしたのは、これをコンピュータの内部表現として使用した場合に、最上位ビットが1のコードをエスケープなどの目的に使い、ISO/IEC 2022などの Unicode や ISO 10646 と異なるコード体系のための内部表現と共用するといった便宜のためである。参考として、4バイトコードで最上位ビットが1のコードを使うものにGB 18030がある。
UCS-4 は、 1114112個 (= 220+216) の符号位置を持ち、そのため十六進で10FFFFまでしか必要としないUnicode符号空間のすべてを表現するのに、UCS-4は十分である。比較的小さな符号位置の集合へのマッピングのためにそのように大きな符号空間を予約するのは浪費だと考える者がいるので、新しい符号化形式 UTF-32 が提案された。UTF-32 は UCS-4 の部分集合で、32ビットの符号値を0から10FFFFの符号空間の範囲でのみ使用する。
UTF-32は、最初はUCS-4規格の部分集合だったが、ISO/IEC JTC 1/SC 2/WG 2の方針と手続きの文書は、すべての将来の文字割り当ては、BMPか最初の14の追加面に制限され、さらに私用面のうち第0群の第224–255面 (E00000–FFFFFF) と第96–127群の面 (60000000–7FFFFFFF) は削除されたと述べている。
参考資料.
用語の日本語表記は原則として次にならった：