字符编码转换概要设计
1.概述
本文主要讨论Unicode、GBK和UTF8的转换。
1.1 Unicode
Unicode(中文:万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准,是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。码位就是可以分配给字符的数字。
在字符编码转换中一般先源编码转换为Unicode编码,在将Unicode编码转换为目标编码。所以在编码转换前需要知道源字符转换为Unicode编码的规则,Unicode编码转换为目标字符的规则。
详细请参考:
1.2 GBK
GBK编码,是在GB2312-80标准基础上的内码扩展规范,使用了双字节编码方案,其编码范围从8140至FEFE(剔除xx7F),共23940个码位,共收录了21003个汉字,完全兼容GB2312-80标准,支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。
虽然GBK编码可以一一映射到Unicode编码上,但没有一个固定的规则,所以一般GBK与Unicode的转换通过查表实现。
详细请参考:
http://baike.baidu.com/view/931619.htm?fromId=25421&redirected=seachword
1.3 UTF-8
UTF-8编码是Unicode的一种实现方式,其所承载的内容本质上还是Unicode,所以其转换方式上有一个固定的规则。具体如下:
如果UNICODE字符由2个字节表示,则编码成UTF-8很可能需要3个字节。而如果UNICODE字符由4个字节表示,则编码成UTF-8可能需要6个字节。用4个或6个字节去编码一个UNICODE字符可能太多了,但很少会遇到那样的UNICODE字符。
实际表示ASCII字符的UNICODE字符,将会编码成1个字节,并且UTF-8表示与ASCII字符表示是一样的。所有其他的UNICODE字符转化成UTF-8将需要至少2个字节。每个字节由一个换码序列开始。第一个字节由唯一的换码序列,由n位连续的1加一位0组成, 首字节连续的1的个数表示字符编码所需的字节数。Unicode转换为UTF-8时,可以将Unicode二进制从低位往高位取出二进制数字,每次取6位,如上述的二进制就可以分别取出为如下示例所示的格式,前面按格式填补,不足8位用0填补。
详细请参考:
2.模块设计
根据概述中的规则,我们设计的模块如下:
底层为具体编码层:实现具体编码与Unicode的转换。
中间为编码控制层:实现组织各编码的转换。
顶层为对外接口层:外部直接调用接口实现字符转换。
3.接口设计
3.1 对外接口层
a. 版本信息接口
b. 创建实例接口(主要用于面向对象的思想)
c. 释放实例接口
d. 设置实例的源编码和目标编码方式
e. 编码转换
f. 与实例无关的编码转换
g. 判断当前的编码方式
具体定义参考:CodeTransformation.h
3.2 编码层接口
a. 获取版本信息接口
b. 将字符转换为unicode
c. 将unicode转换为目标字符编码
d. 判断是否为当前库的编码方式
具体定义参考:CodeTransformation.h
如有需要请联系我,wjh_2010@163.com.