UTF-16

UTF-16 是一種 字元編碼 標準,用於 Unicode。它使用一個或兩個 程式碼單元 對每個 Unicode 碼點 進行編碼。每個程式碼單元是一個 16 位的值。

值小於 216 的碼點被編碼為單個程式碼單元,其數值等於碼點的值。這些碼點組成了基本多語言平面 (BMP),幷包含最常見的字元,包括拉丁文、希臘文、西里爾文和許多東亞字元。

例如,拉丁字元“A”在 Unicode 中被分配碼點 U+0041,在 UTF-16 中表示為單個程式碼單元 41

值大於 216 的碼點使用一對程式碼單元進行編碼,這被稱為代理對。用於代理對的值不用於 Unicode 碼點,以避免歧義。

例如,表情符號字元“🦊”(狐狸臉)在 Unicode 中被分配碼點 U+1F98A,在 UTF-16 中表示為代理對 d83e dd8a

JavaScript 中的 UTF-16

JavaScript 中的字串使用 UTF-16 表示,並且許多 String API 操作的是程式碼單元,而不是碼點。例如,對於包含一個不在 BMP 中的單個 Unicode 字元的字串,String.length 返回 2

js
const string = "🦊"; // U+1F98A
console.log(string.length); // 2

String.charCodeAt() 方法返回給定索引處的程式碼單元,而 String.codePointAt() 方法返回給定索引處的碼點。

js
const string = "🦊"; // U+1F98A

console.log(string.charCodeAt(0).toString(16)); // d83e
console.log(string.charCodeAt(1).toString(16)); // dd8a

console.log(string.codePointAt(0).toString(16)); // 1f98a

要了解更多關於在 JavaScript 中使用 UTF-16 字串的資訊,請參閱 UTF-16 字元、Unicode 碼點和字素簇

UTF-16 和 UTF-8

UTF-8 是 Unicode 的另一種編碼,它對每個 Unicode 碼點使用一到四個位元組。UTF-8 在 Web 文件中的使用比 UTF-16 更常見。

UTF-16 和 UCS-2

UCS-2 是一種已過時的 Unicode 編碼。它與 UTF-16 相同,但不支援代理對,因此無法編碼 BMP 之外的碼點。

另見