日志
返回日志列表
关于 字符编码的 转换 知识 2014-8-30 10:02 阅读(0)
赞
评论
转载
分享
复制地址
编辑
上一篇 | 下一篇:深入学习C++_Stri...
开通黄钻
关于 字符编码的 转换 知识
C/C++ 字符编码的转换(ut8、gb2312)
源码:
http://pan.baidu.com/s/1hqy00YS
字符编码简介
Unicode
是一种字符编码规范。先从
ASCII
说起。
ASCII
是用来表示英文字符的一种编码规范,每个
ASCII字符占用
1
个字节(
8bits
)。因此,ASCII编码可以表示的最大字符数是256,其实英文字符并没
有那么多,一般只用前128个(最高位为0),其中包括了控制字符、数字、大小写字母和其他一些符
号 。而最高位为1的另128个字符被成为“扩展ASCII”,一般用来存放英文的制表符、部分音标字符
等等的一些其他符号。这种字符编码规范显然用来处理英文没有什么问题。(实际上也可以用来处理
法文、德文等一些其他的西欧字符,但是不能和英文通用),但是面对中文、阿拉伯文之类复杂的文
字,255个字符显然不够用,于是,各个国家纷纷制定了自己的文字编码规范,其中中文的文字编码规
范叫做“GB2312-80”,它是和ASCII兼容的一种编码规范,其实就是利用扩展ASCII没有真正标准化这
一点,把一个中文字符用两个扩展ASCII字符来表示。但是这个方法有问题,最大的问题就是,中文文
字没有真正属于自己的编码,因为扩展ASCII码虽然没有真正的标准化,但是PC里的ASCII码还是有一
个事实标准的(存放着英文制表符),所以很多软件利用这些符号来画表格。这样的软件用到中文系
统中,这些表格符就会被误认作中文字,破坏版面。而且,统计中英文混合字符串中的字数,也是比
较复杂的,我们必须判断一个ASCII码是否扩展,以及它的下一个ASCII是否扩展,然后才“猜”那可
能是一个中文字 。
总之当时处理中文是很痛苦的。而更痛苦的是
GB2312
是国家标准,台湾当时有一个Big5编码标准,
很多编码和GB是相同的,所以……,嘿嘿。这时候,我们就知道,要真正解决中文问题,不能从扩展
ASCII的角度入手,也不能仅靠中国一家来解决。而必须有一个全新的编码系统,这个系统要可以将中
文、英文、法文、德文……等等所有的文字统一起来考虑,为每个文字都分配一个单独的编码,这样
才不会有上面那种现象出现。于是,Unicode诞生了。
Unicode
有两套标准,一套叫
UCS-2(Unicode-16)
,用
2
个字节为字符编码,另一套叫
UCS-4(Unicode-32)
,