字符集与编码

字符集就是客观世界上存在的各种语言符号,如英语26个字符,汉字,拉丁字符等
编码就是将字符集用二级制表示出来的一种规范。
常用字符集有
ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等。
ASCII,很有名,也很简单。
GB2312对ASCII进行修改,
一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到 0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了。GB2312的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99.75%的使用频率。对于人名古汉语等方面出现的罕用字,GB2312不能处理,这导致了后来GBKGB 18030汉字字符集的出现。

当计算机传到世界各个国家时,为了适合当地语言和字符,设计和实现类似GB232/GBK/GB18030/BIG5的编码方案。这样各搞一套,在本地使用没有问题,一旦出现在网络中,由于不兼容,互相访问就出现了乱码现象。为了解决这个问题,一个伟大的创想产生了——Unicode。Unicode编码系统为表达任意语言的任意字符而设计。他使用4字节的数字来表达每个字母,符号,或者表意文字。每个数字代表唯一的至少在某种语言中使用的符号。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符。(注意这里的数字4字节长度,并不是计算机中存储的字符的实际的长度,Unicode是字符集,不是编码方案,即和计算机中的具体实现没有关系。并且UCS-2比较流行,即2个字节长度。UCS-4不流行)
Unicode编码字符集只是统一定义了所有字符和它对应Unicode编码值,而我们的程序中怎么去存储和读取这个Unicode编码值呢?显然,你可以直接统一规定所有Unicode编码值用四个字节来存储。但是这样的话,对于Unicode编码字符集中的与ASCII码表对应的那部分字符(只需要一个字节来表示的Unicode编码值)就有点浪费了。这样,就有了各种的编码方式UTF-32/ UTF-16/ UTF-8。(注意Unicode是字符集,UTF-32/ UTF-16/ UTF-8是三种字符编码方案。)
Unicode只有一个字符集,中、日、韩的三种文字占用了Unicode中0x3000到0x9FFF的部分。 Unicode目前普遍采用的是UCS-2,它用两个字节来编码一个字符, 比如汉字"经"的编码是0x7ECF,注意字符编码一般用十六进制来 表示,为了与十进制区分,十六进制以0x开头,0x7ECF转换成十进制 就是32463,UCS-2用两个字节来编码字符,两个字节就是16位二进制, 2的16次方等于65536,所以UCS-2最多能编码65536个字符。 编码从0到127的字符与ASCII编码的字符一样,比如字母"a"的Unicode 编码是0x0061,十进制是97,而"a"的ASCII编码是0x61,十进制也是97, 对于汉字的编码,事实上Unicode对汉字支持不怎么好,这也是没办法的, 简体和繁体总共有六七万个汉字,而UCS-2最多能表示65536个,才六万 多个,所以Unicode只能排除一些几乎不用的汉字,好在常用的简体汉字 也不过七千多个,为了能表示所有汉字,Unicode也有UCS-4规范,就是用 4个字节来编码字符,不过现在普遍采用的还是UCS-2,只用两个字节来。

在Windows Xp/2000中,记事本->另存为时,可以选择ANSI,UNICODE,UTF-8, UNICODE big endian的编码方式。这里的UNICODE应该为UCS-2直接的编码方式,就是字符在UNICODE中的数字编号为多少,则用该数字直接编码。ANSI有自己专有的编码方式,UTF-8是Unicode字符集的编码方式。

参考资料:

http://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html

http://baike.baidu.com/view/40801.htm

http://www.douban.com/note/166375972/

http://blog.csdn.net/nodeathphoenix/article/details/7057760

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值