欢迎来到天天文库
浏览记录
ID:51921994
大小:143.88 KB
页数:21页
时间:2020-03-19
《浅谈文字编码和Unicode(中).docx》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、浅谈文字编码和Unicode(中) 3字符编码模型程序员经常会面对复杂的问题,而降低复杂性的最简单的方法就是分而治之。PeterConstable在他的文章"CharactersetencodingbasicsUnderstandingcharactersetencodingsandlegacyencodings"中描述了字符编码的四层模型。我觉得这种说法确实可以更清晰地展现字符编码中发生的事情,所以在这里也介绍一下。3.1字符的范围(Abstractcharacterrepertoire)设计字
2、符编码的第一层就是确定字符的范围,即要支持哪些字符。有些编码方案的字符范围是固定的,例如ASCII、ISO8859系列。有些编码方案的字符范围是开放的,例如Unicode的字符范围就是世界上所有的字符。3.2用数字表示字符(Codedcharacterset)设计字符编码的第二层是将字符和数字对应起来。可以将这个层次理解成数学家(即从数学角度)看到的字符编码。数学家看到的字符编码是一个正整数。例如在Unicode中:汉字“字”对应的数字是23383。汉字“”对应的数字是134192。在写html文
3、件时,可以通过输入"字"来插入字符“字”。不过在设计字符编码时,我们还是习惯用16进制表示数字。即将23383写成0x5BD7,将134192写成0x20C30。3.3用基本数据类型表示字符(Characterencodingform)设计字符编码的第三层是用编程语言中的基本数据类型来表示字符。可以将这个层次理解成程序员看到的字符编码。在Unicode中,我们有很多方式将数字23383表示成程序中的数据,包括:UTF-8、UTF-16、UTF-32。UTF是“UCSTransform
4、ationFormat”的缩写,可以翻译成Unicode字符集转换格式,即怎样将Unicode定义的数字转换成程序数据。例如,“汉字”对应的数字是0x6c49和0x5b57,而编码的程序数据是:BYTEdata_utf8[]={0xE6,0xB1,0x89,0xE5,0xAD,0x97};//UTF-8编码 WORDdata_utf16[]={0x6c49,0x5b57}; //UTF-16编码 DWORDdata_utf32[]={0x6c
5、49,0x5b57}; //UTF-32编码这里用BYTE、WORD、DWORD分别表示无符号8位整数,无符号16位整数和无符号32位整数。UTF-8、UTF-16、UTF-32分别以BYTE、WORD、DWORD作为编码单位。“汉字”的UTF-8编码需要6个字节。“汉字”的UTF-16编码需要两个WORD,大小是4个字节。“汉字”的UTF-32编码需要两个DWORD,大小是8个字节。4.2节会介绍将数字映射到UTF编码的规则。3.4作为字节流的字符(
6、Characterencodingscheme)字符编码的第四层是计算机看到的字符,即在文件或内存中的字节流。例如,“字”的UTF-32编码是0x5b57,如果用littleendian表示,字节流是“575b0000”。如果用bigendian表示,字节流是“00005b57”。字符编码的第三层规定了一个字符由哪些编码单位按什么顺序表示。字符编码的第四层在第三层的基础上又考虑了编码单位内部的字节序。UTF-8的编码单位是字节,不受字节序的影响。UTF-16、UTF-32根据字节序的不同,又衍生出
7、UTF-16LE、UTF-16BE、UTF-32LE、UTF-32BE四种编码方案。LE和BE分别是LittleEndian和BigEndian的缩写。3.5小结通过四层模型,我们又把字符编码中发生的这些事情梳理了一遍。其实大多数代码页都不需要完整的四层模型,例如GB18030以字节为编码单位,直接规定了字节序列和字符的映射关系,跳过了第二层,也不需要第四层。4再谈UnicodeUnicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射
8、这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。码位就是可以分配给字符的数字。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。Unicode字符集可以简写为UCS(UnicodeCharacterSet)。早期的Unicode标准有UCS-2、UCS-4的说法。UCS-2用两个字节编码,UCS-4用4个字节编码。UCS-4根据最高位为0的最高字节分成2^7=128个group。每个group再根据次高字节分为256个平面(plan
此文档下载收益归作者所有