您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:71 来源:vckbase.com

本文章共2188字,分2页,当前第1页,快速翻页:
 

常用编码详解


作者:李静南



摘要:本文在对各种资料整理后详细介绍各种常见编码的转换算法。
逆风者

一、通用字符集(UCS)

ISO/IEC 10646-1 [ISO-10646]定义了一种多于8比特字节的字符集,称作通用字符集(UCS),它包含了世界上大多数可书写的字符系统。 已定义了两种多8比特字节编码,对每一个字符采用四个8比特字节编码的称为UCS-4,对每一个字符采用两个8比特字节编码的称为UCS-2。 它们仅能够对UCS的前64K字符进行编址,超出此范围的其它部分当前还没有分配编址。

二、基本多语言面(BMP)

ISO 10646 定义了一个31位的字符集。 然而,在这巨大的编码空间中,迄今为止只分配了前65534个码位 (0x0000 到 0xFFFD)。 这个UCS的16位子集称为 “基本多语言面 ”(Basic Multilingual Plane, BMP)。

三、Unicode编码

历史上, 有两个独立的, 创立单一字符集的尝试。 一个是国际标准化组织(ISO)的 ISO 10646 项目; 另一个是由(一开始大多是美国的)多语言软件制造商组成的协会组织的 Unicode 项目。幸运的是, 1991年前后, 两个项目的参与者都认识到: 世界不需要两个不同的单一字符集。它们合并双方的工作成果,并为创立一个单一编码表而协同工作。 两个项目仍都存在并独立地公布各自的标准, 但 Unicode 协会和 ISO/IEC JTC1/SC2 都同意保持 Unicode 和 ISO 10646 标准的码表兼容, 并紧密地共同调整任何未来的扩展。Unicode 标准额外定义了许多与字符有关的语义符号学, 一般而言是对于实现高质量的印刷出版系统的更好的参考。

四、UTF-8编码

UCS-2和UCS-4编码很难在许多当前的应用和协议中使用,这些应用和协议假定字符为一个8或7比特的字节。 即使新的可以处理16比特字符的系统,却不能处理UCS-4数据。这种情况导致一种称为UCS转换格式(UTF)的发展,它每一种有不同的特征。 UTF-8(RFC 2279),使用了8比特字节的所有位,保持全部US-ASCII取值范围的性质:US-ASCII字符用一个8比特字节编码,采用通常的US-ASCII值, 因此,在此值下的任何一个8比特位字节仅仅代表一个US-ASCII字符,而不会为其他字符。它有如下的特性:

1)UTF-8向UCS-4,UCS-2两者中任一个进行相互转换比较容易。
2)多8比特字节序列的第一个8比特字节指明了系列中8比特字节的数目。
3)8比特字节值FE和FF永远不会出现。
4)在8比特字符流中字符边界从哪里开始较容易发现。

UTF-8定义:
在UTF-8中,字符采用1到6个8比特字节的序列进行编码。仅仅一个8比特字节的一个序列中,字节的高位为0,其他的7位用于字符值编码。n(n>1)个8比特字节的一个序列中,初始的8比特字节中高n位为1,接着一位为0,此字节余下的位包含被编码字符值的位。接着的所有8比特字节的最高位为1,接着下一位为0,余下每个字节6位包含被编码字符的位。

下表总结了这些不同的8比特字节类型格式。字母x指出此位来自于进行编码的UCS-4字符值。


   UCS-4范围(16进制)     UTF-8 系列(二进制)

   0000 0000<->0000 007F   0xxxxxxx

   0000 0080<->0000 07FF   110xxxxx 10xxxxxx

   0000 0800<->0000 FFFF   1110xxxx 10xxxxxx 10xxxxxx



   0001 0000<->001F FFFF   11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

   0020 0000<->03FF FFFF   111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

   0400 0000<->7FFF FFFF   1111110x 10xxxxxx ... 10xxxxxx


从UCS-4 到 UTF-8编码规则如下:
1)从字符值和上表第一列中决定需要的8比特字节数目。着重指出的是上表中的行是相互排斥的,也就是说,对于一个给定的UCS-4字符,仅仅有一个有效的编码。
2)按照上表中第二列每行那样准备8比特字节的高位。
3)将UCS字符值的位,从低位起填充在标记为x地方。从UTF8序列中最后一个字节填起,然后剩下的字符值依次放到前一个字节中,如此重复,直到所有标记位x的位都进行了填充。
 
本文章更多内容1 - 2 - 下一页>>
相关文章

在List Control中实现列表项目的上下移动
深入浅出ShellExecute
软件框架的利器、TangramMini组件应用教程一
除虫随记
基于 ODBC 自动存储自动定期删除数据库记录
乱砍设计模式之一:STRATEGY模式———赵子
Win32串口编程
Windows2000下的Raw TCP/IP库
模拟器和远程调试工具(一)
调试方法和技巧
更新MFC中的视图,跟踪.NET Framework中的事
编程之道
修改一个完全颜色的CListCtrl类
消息值,托管字符串,扰乱代码及其它
如何让一个打开的文档成为活动文档
软件框架的利器、TangramMini组件应用教程四
用 ATL ActiveX 绘制任意平面函数的曲线
文件系统识别器
控件如何传递自定义struct
完美实现真彩自绘菜单

相关评论


本文章所属分类:首页 VC++

  热门关键字: