UTF-32

UTF-32是32位元固定長度Unicode編碼形式。相較於UTF-8UTF-16等可變長度編碼而言,UTF-32編碼下每個字元的長度都固定的,且與Unicode碼位的數值完全一致。

但實際上每個編碼占用32位元實在浪費太多空間,尤其是一般文件佔最大比重的資料都在基本多語言平面內,UTF-32占用了幾乎是UTF-16兩倍、UTF-8的三到四倍的空間,故實際上實務上幾乎沒有檔案規格使用UTF-32進行儲存。而多使用在需要高效率存取文字的記憶體的內部處理上。

編碼方式

UTF-32編碼下每個字元都固定式與Unicode碼位一致的32位元值。

碼位UTF-8UTF-16UTF-32
U+0041A41004100000041
U+03C9ωCF 8903C9000003C9
U+20ACE2 82 AC20AC000020AC
U+2C9B0𬦰F0 AC A6 B0D872 DDB00002C9B0

理論上而言,UTF-32與UTF-16一樣,會有位元組序列順序的問題,又分成UTF-32BE與UTF-32LE。不過實務上UTF-32很少用來實際儲存檔案,所以問題不大。

比較常使用的形式反而是像AFDKO的CMap檔案,直接用來書寫Unicode碼位用:

<000020AC> 1243

歷史

原本ISO 10646標準定義了一個32位元的編碼形式UCS-4,可用來表達通用字元集(UCS)內 0x00000000~0x7FFFFFFF 編碼空間內高達20億碼位的所有文字,UTF-32原本也繼承了UCS-4的規定。

但由於UTF-16代理對限制了編碼空間最多只能到 U+10FFFF。但2003年11月,RFC 3629 標準 Unicode 限制為僅支援 U+10FFFF 以內的碼位。接下來Unicode聯盟與ISO 10646也都陸續宣示Unicode的編碼範圍會被限制在 U+10FFFF 內。故UTF-32實際上只用到21個位元,前方11個位元都是浪費的。

參考