Surrogate Pair是UTF-16中用於擴展字元而使用的編碼方式,是一種採用四個位元組(兩個UTF-16編碼)來表示一個字元。
基本介紹
- 中文名:代理對
- 外文名:surrogate pair
概述,編碼規則,
概述
在UTF-16中,在範圍U+0000到U+FFFF間的碼點使用一個單一的16位編碼單元表示。但是,隨著國際字元的不斷增加,16位編碼空間無法滿足編碼的要求。
UNICODE標準組織UTF-16最佳化了基本多語言平面(BMP, Basic Multilingual Plane)中字元的表示,即位於U+0000到U+FFFF範圍內的字元。該範圍包含了目前世界上所使用的書寫系統中的絕大多數字元,每個字元只需要一 個16位的編碼單元。對於基本多語言平面,UTF-16可作為固定寬度的編碼格式來有效使用。
但對於增補字元,UTF-16需要兩個16位的編碼單元,意味著正式的UTF-16是一個變寬的編碼格式。就在範圍U+10000到U+10FFFF間的編碼則使用一對16位編碼單元表示,稱作代理對(surrogate pair)。
UNICODE標準組織UTF-16最佳化了基本多語言平面(BMP, Basic Multilingual Plane)中字元的表示,即位於U+0000到U+FFFF範圍內的字元。該範圍包含了目前世界上所使用的書寫系統中的絕大多數字元,每個字元只需要一 個16位的編碼單元。對於基本多語言平面,UTF-16可作為固定寬度的編碼格式來有效使用。
但對於增補字元,UTF-16需要兩個16位的編碼單元,意味著正式的UTF-16是一個變寬的編碼格式。就在範圍U+10000到U+10FFFF間的編碼則使用一對16位編碼單元表示,稱作代理對(surrogate pair)。
UTF-16是早期Unicode遺留下的歷史產物,原本被設計成具有固定寬度的16位編碼格式。為支持超過U+FFFF的增補字元,設立了代理機制。
編碼規則
在BMP內的字元,仍然按照UTF-16的編碼規則,使用兩個字元來表示。(註:BMP內的字元編碼,不包含從U+D800到U+DFFF的預留碼位。這些預留碼位就恰好用於擴展字元編碼)
增補字元的編碼值已經超過了BMP的編碼範圍,所以,需要使用一對UTF-16字元來表示一個字元。UTF-16編碼以16位無符號整數為單位。我們把Unicode編碼記作U。編碼規則如下:
- 如果U<0x10000,U的UTF-16編碼就是U對應的16位無符號整數。
- 如果U≥0x10000,
- 我們先計算U’=U-0x10000,
- 然後將U’寫成二進制形式:yyyy yyyy yyxx xxxx xxxx,
- U的UTF-16編碼(二進制)就是:110110yyyyyyyyyy 110111xxxxxxxxxx。
這兩個字元就稱為surrogate pair(代理對)。第一個代理字元為16位編碼,範圍為U+D800到U+DBFF,第二個代理字元也是一個16位編碼,範圍為U+DC00 to U+DFFF。