UTF-32
此條目可參照英語維基百科相應條目來擴充。 (2020年7月28日) |
UTF-32是32位元Unicode轉換格式(Unicode Transformation Formats, 或UTF)的縮寫。UTF-32是一種用於編碼Unicode的協定,該協定使用32位元位元對每個Unicode碼位進行編碼(但前導位元數必須為零,故僅能表示231個Unicode碼位)。與其他可變長度的Unicode轉換格式(UTF)相比,UTF-32編碼長度是固定的,UTF-32中的每個32位元值代表一個Unicode碼位,並且與該碼位的數值完全一致。
UTF-32的主要優點是可以直接由Unicode碼位來索引。在編碼序列中尋找第N個編碼是一個常數時間操作。相比之下,其他可變長度編碼需要進行循序存取操作才能在編碼序列中找到第N個編碼。這使得在電腦程式設計中,編碼序列中的字元位置可以用一個整數來表示,整數加一即可得到下一個字元的位置,就和ASCII字串一樣簡單。
UTF-32的主要缺點是每個碼位使用四個位元組,空間浪費較多。在大多數文字中,非基本多文種平面的字元非常罕見,這使得UTF-32所需空間接近UTF-16的兩倍和UTF-8的四倍(具體取決於文字中ASCII字元的比例)。
儘管每一個碼位使用固定長度的位元組看似方便,但UTF-32並不如其它Unicode編碼使用廣泛。與UTF-8及UTF-16相比,UTF-32更容易遭到截斷。即使使用了"定寬"字型,在大多數情況下用UTF-32計算顯示字串的寬度也並不比其他編碼更加容易。主要原因是,存在着一個字元位置會有多於一種可能的碼點(結合字元)或一個碼點用多於一個字元位置(如CJK表意字元)。結合符號也意味着,文書編輯者不能將一個碼位視同一個編輯上的單位。
歷史
原本ISO 10646標準定義了一個32位元的編碼形式,稱作UCS-4,通用字元集(UCS)的每一個字元由0到十六進制的7FFFFFFF的31位元數值表示(符號位未使用且零)。UCS-4足以用來表示所有的Unicode的字碼空間,其最大的碼位為十六進制的7FFFFFFF,所以其空間約20億個碼位。2003年11月,由於UTF-16編碼形式的限制,RFC 3629標準將Unicode限制為僅支援U+10FFFF以內的碼位(另外U+D800到U+DFFF範圍內也被保留使用)[1][2]。雖然在之前的ISO標準(1998年的Unicode 2.1)中0xE00000到0xFFFFFF和0x60000000到0x7FFFFFFF這些區域被分配給「保留私人使用」,但這些區域也在後續版本中被刪除。在 ISO/IEC JTC 1/SC 2 WG2申明中規定UCS-4將來所有的字元分配將被限制在Unicode範圍內,所以UTF-32和UCS4能表示的字元是相同的。
註釋
- ^ ISO/IEC 10646:2014 (頁面存檔備份,存於互聯網檔案館) Clause 9.4: "Because surrogate code points are not UCS scalar values, UTF-32 code units in the range 0000 D800-0000 DFFF are ill-formed". Clause 4.57: "[UCS codespace] consisting of the integers from 0 to 10 FFFF (hexadecimal)". Clause 4.58: "[UCS scalar value] 存档副本 (PDF). [2017-04-13]. (原始內容 (PDF)存檔於2015-01-04). any UCS code point except high-surrogate and low-surrogate code points".
- ^ Mapping code points to Unicode encoding forms (頁面存檔備份,存於互聯網檔案館), § 1: UTF-32
外部連結
- (英文)The Unicode Standard 4.1,第三章 (頁面存檔備份,存於互聯網檔案館) - 在§3.10, D43-D4中正式定義 UTF-32
- (英文)Unicode Standard Annex #19 (頁面存檔備份,存於互聯網檔案館) - Unicode 3.x 中正式定義的 UTF-32(2001 年三月;最後更新於 2002 年三月)
- (英文)註冊新字集:UTF-32, UTF-32BE, UTF-32LE - IANA 字元集新增 UTF-32的宣言(2002 年四月)