代理區和代理組的處理

為了在基本多文種平面(BMP)之外擴展更多的編碼空間,ISO/IEC 10646:2000在BMP中定義一個代理區(Surrogate, D800-DFFF),並平分成兩個區,分別稱為高半代理區(High-half Zone, D800-DBFF)和低半代理區(Low-half Zone, DC00-DFFF),從其中各取一個編碼組成一個四字節的代理來映射一個在BMP以外平面上的編碼字符位。從高半代理區取出的編碼稱為高半代理碼。從低半代理區取出的編碼稱為低半代理碼。

代理組提供了用BMP的2字節編碼來表示在基本多文種平面(BMP)之外的16個平面編碼的機製。一些不常用的字符可以用代理組表示。並不是所有的編碼實現方式都要處理代理組。目前,造字廠商用代理組來支持ISO/IEC 10646-2:2001 和Unicode 3.1。

高半代理區和低半代理區的劃分,使編碼位相互區分開。非代理區字符一定不會在這個區裡。因為高半代理區和低半代理區不相交,只要掃描前綴或後綴碼,不需考慮其他的上下文,就可以決定字符值的邊界。一個組織完好的文本中,高半代理碼和低半代理碼總是按先後成對出現。

如果在實現上沒有刪除代理碼或在代理碼對中插入字符,數據的完整性就可得到保証。即使數據有殘損,也只是局部的。一個殘缺 的碼只影響一個字符。因為高半代理區和低半代理區不相交,且成對出現,錯碼不會傳到文本的其他部分。

具體來說,一個代理組<H,L>由碼值為D800-DBFF 的高半代理碼H和碼值為 DC00-DFFF低半代理碼L組成。將一個字符映射到UCS-4碼位中。假設N是UCS-4碼值,則有:

N=(H-D800)*400+(L-DC00)+10000

於是得到N的碼值為10000到10FFFF。