- 1、本文档被系统程序自动判定探测到侵权嫌疑,本站暂时做下架处理。
- 2、如果您确认为侵权,可联系本站左侧在线QQ客服请求删除。我们会保证在24小时内做出处理,应急电话:400-050-0827。
- 3、此文档由网友上传,因疑似侵权的原因,本站不提供该文档下载,只提供部分内容试读。如果您是出版社/作者,看到后可认领文档,您也可以联系本站进行批量认领。
查看更多
打造UCS瑞士军刀
Unicode是由国际组织设计,可以容纳全世界所有语言文字的编码方案。Unicode的学名是Universal Multiple-Octet Coded Character Set”,简称为UCS。UCS可以看作是Unicode Character Set”的缩写。U+D800到U+DBFF之间,低位代理的取值范围在U+DC00到U+DFFF之间。由于高低代理的取值范围是前后相接的,所以合并起来得到U+ D800到U+DFFF这个“代理取值范围”。
在字符串中,凡是取值在U+ D800到U+DFFF之外的编码单元就是BMP字符,否则就是代理对编码单元。
在字符串中,代理必须成对给出,不可分割。也就是说,高位代理的后面必须是一个低位代理,低位代理的前面必须是一个高位代理;高位代理的前面不能是一个高位代理,低位代理的后面不能是一个低位代理。
因此在UTF-16字符串中,如果要对代理对提供完整支持的话,至少应该实现以下几个基本功能:
在字符串中判断某个位置上的编码单元的类型(即是无效编码单元、BMP字符、高位代理还是低位代理)。
把编码点转换为UTF-16字符串。
计算UTF-16字符串中指定位置上的编码单元所属的那个字符的编码点。
把代理对转换为编码点。
编码点转换为代理对。
编码单元类型识别
原理:很简单,根据前面总结的几条代理对机制基本元素,就可以编写出相应的识别算法了。
编程:
// 判断UTF-16编码格式字符串中指定位置编码单元的类型:
// 0 表示 无效编码单元
// 1 表示 BMP字符
// 2 表示 高位代理
// 3 表示 低位代理
function UTF16CodeUnitType(UTF16Str:PWideChar;Index:integer):integer; stdcall;
var
UTF16Code:Word;
begin
if (UTF16Strnil) and (UTF16Str^#0) then
begin
UTF16Code:=Ord(UTF16Str[Index-1]);
if (UTF16Code=$D800) and (UTF16Code=$DFFF) then
begin
if UTF16Code=$DBFF then
begin
if UTF16Str[Index]#0 then
begin
UTF16Code:=Ord(UTF16Str[Index]);
if (UTF16Code=$DC00) and (UTF16Code=$DFFF) then
Result:=2
else
Result:=0
end
else
Result:=0
end
else
if Index1 then
begin
UTF16Code:=Ord(UTF16Str[Index-2]);
if (UTF16Code=$D800) and (UTF16Code=$DBFF) then
Result:=3
else
Result:=0
end
else
Result:=0
end
else
Result:=1
end
else
Result:=0
end;
把编码点转换为UTF-16字符串
原理:因为代理对由前后两个代理组成,所以根据高低代理取值范围的定义,可以很容易地计算出代理对可以表示的增补字符总数=(0xDBFF-0xD800+1)*(0xDFFF-0xDC00+1)=1048576。而在Unicode标准里面,每个字符平面的大小是65536,由于1048576/65536=16,所以增补字符平面总共有16个。所有增补字符的Unicode编码点取值范围在U+10000到U+10FFFF之间,其中第一个增补平面在U+10000到U+1FFFF之间;第二个增补平面在U+20000至U+2FFFF之间;……第十六个增补平面在U+100000到U+10FFFF之间。
对于把编码点转换为UTF-16字符串的工作来说,如果是BMP编码点的话很简单,编码点的值就等于UTF-16编码单元的值。关键部分在于增补字符也就是增补编码点如何转换为代理对的问题。既然已经知道代理对由前后两个代理编码单
您可能关注的文档
最近下载
- 新12S3室外排水工程建筑工程图集 .docx VIP
- 医院药品效期管理课件.pptx VIP
- 2025年高考语文最全古代文学常识知识点重点汇编.docx
- Part 1-2 Unit 3 Shopping 课件-中职高一英语(高教版基础模块1).pptx
- 公路工程高级工程师答辩题库大全(公路、桥梁、交通工程、隧道、材料、构造物、防护、试验、监理、预算).docx
- 人体测量部位及方法.pdf VIP
- GB 45673- 2025《危险化学品企业安全生产标准化通用规范》之“5.11变更管理”专业解读与应用(雷泽佳编制-2025A0).pdf VIP
- 急性胰腺炎课件.ppt VIP
- 2025年新教材人教版八年级上册生物全册知识点(含默写版).pdf
- 庚辰本红楼梦(word文档).doc VIP
原创力文档


文档评论(0)