字符编码转换概要设计

字符编码转换概要设计

1.概述

本文主要讨论Unicode、GBK和UTF8的转换。

1.1 Unicode

Unicode(中文:万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准,是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。码位就是可以分配给字符的数字。

在字符编码转换中一般先源编码转换为Unicode编码,在将Unicode编码转换为目标编码。所以在编码转换前需要知道源字符转换为Unicode编码的规则,Unicode编码转换为目标字符的规则。

详细请参考:

http://baike.baidu.com/link?url=awgxL9mLR3Noz5sZ5RdDWjN5BvTOFLGjWxGHGT_HEETMXUU6t-eerRwgZsXItwPjm7tO6upwHR7NpNVX6Or2KK

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填补。

详细请参考:

http://baike.baidu.com/link?url=HFndSIk4tLrtw-Z6V_VPMCwzRjR3rbvNNlEK6K3TvtoqBmB9Mg4Vb4LONolFOBNa-B-67Z2bEGfqpQBtmBBjgK

 

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.

 

 

字符编码转换概要设计

上一篇:南邮-substring


下一篇:uva 10635 Prince and Princess 最长公共子串