从程序员的角度看ASCII, GB2312, UNICODE, UTF-8

从程序员的角度看ASCII, GB2312, UNICODE, UTF-8

ID:40594828

大小:23.99 KB

页数:5页

时间:2019-08-04

从程序员的角度看ASCII, GB2312, UNICODE, UTF-8_第1页
从程序员的角度看ASCII, GB2312, UNICODE, UTF-8_第2页
从程序员的角度看ASCII, GB2312, UNICODE, UTF-8_第3页
从程序员的角度看ASCII, GB2312, UNICODE, UTF-8_第4页
从程序员的角度看ASCII, GB2312, UNICODE, UTF-8_第5页
资源描述:

《从程序员的角度看ASCII, GB2312, UNICODE, UTF-8》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、从程序员的角度看ASCII,GB2312,UNICODE,UTF-8 2011-01-1116:58:35分类: LINUX字符编码是怎么回事 0.概念字节是计算机的最基本存储单位,一个字节包括8个位.字符是一种文字的基本单位,比如'A'是一个字符,'汉'也是一个字符.1.计算机被发明之后,程序员们编写了很多复杂的计算让计算机运行.但是一个问题是,计算机如何把辛苦计算的结果告知程序员?假设计算机把计算结果放在某个寄存器,内容是1010010总不能让程序员去检测每个引脚的电位吧?还是得有个显示器.显示器是依靠点阵来显示图像的.CPU必须告诉显示器,当CPU把一个字节的数据比如001

2、01010放入显示器寄存器的时候,显示器要显示怎样的一个点阵(图像),这个图像就是我们人类可以看得懂的字符.这样问题就解决了,比如当CPU把00110001放入显示器寄存器时,显示器就显示(控制点阵画出一个图像-字体)字符"1",这是一个查表的过程,内存中的值(内码)和字符是一一对应的.问题是这个对应关系是可以自由确定的,我可以指定显示器把00110001(内码)显示为字符"1",也可以指定显示为字符"2".这样当然会引起混乱,同一个内码被映射为不同的字符,不利于人们的交流. 美国国家标准学会(ANSI)决定着手解决这个问题,英语有一个很小的字符集,26个字母再加上一些控制字符和

3、标点符号,7位2进制值就足以表示所有的变化.于是ANSI公布了一个标准的对应关系,以字节为单位.当内码为0110001时,大家都公认它代表字符"1",在所有显示器都显示为同一个字符.这样大家就可以按照同一个标准相互交换数据而不会引起误解.这个表就是一个包含了128项的对应关系,叫做"ASCII",美国信息交换标准代码.2.对于中国这样不使用ABC字符的国家来说,如何显示自己的文字是一个大问题.我们可以制定一个内码表,指定一个内码对应一个汉字.(由于中文的字符非常多,所以一个字节是不够的,至少也要有2个字节存储一个内码.)这是很容易的,只要国家公布一个标准的内码字符对应表,大家都遵

4、照这个表就可以了.但是还是有一些问题要注意:(1).即使在中国,计算机还是得能显示英文吧?而英文的内码已经有ASCII标准在先,并且已经有无数的程序已经在这个标准上运行了很多年,成为不可或缺的部分.所以我们新制定的内码表必须和ASCII兼容.(2)很多C语言的库函数是以内码0作为字符串结束标志的,为了兼容那些以前就已经编写好,并且运行良好的程序,我们指定的内码中不能含有值为0的字节.巧合的是,所有的ASCII内码的最高位都为0.那么我们只要让第一个和第二个字节(一个汉字占用2个字节)的最高位都为1,这样既和ASCII内码区分开来,又不会出现0.符合这个规则的内码(2字节长)理论上

5、一共可以标识127*127=16129个字符(实际上只用了6000多个码位,保留了一些,不过也已经够用了,常用的中文字符只有4000多个).我们国家公布的这个内码标准表就是GB2312.原有的英文软件可以很好的运行,C的库函数也不用做修改,比如strlen("ABC")在GB2312表示的内码中,由于GB2312对英文字符的编码是和ASCII完全一样的,所以返回3.对于strlen("A汉字"),由于strlen()是以内码为0作为边界的,而所有中文字符的GB2312内码高位都为1,不会出现0,并且每个汉字占用2个字节,所以strlen返回5.对于程序来说只要检查一个字节的最高位

6、,就可以很容易的判断这个字符是中文还是英文字符,非常方便."一个字母一个字节,一个汉字2个字节"的观念深入人心.有了GB2312之后,汉字显示/存储/交换就基本上没什么问题了.几乎所有的非英语国家都制定了和GB2312类似兼容ASCII的内码字符对应表.(BIG5由于有几个字符的内码和ASCII相同但表示不同的字符,不符合2.(1)条件.所以被认为是有"瑕疵"的.)3.很明显,GB2312的码位是不够的,一个例子就是有很多人的人名电脑里打不出来.(只有6000多个码位,而<<康熙字典>>就收录了4万多个汉字).所以后来有出现了诸如GBK,GB18030以及同期流行于台湾香港的BI

7、G5编码.虽然编码有些不同,但是设计思想是一致的:兼容ASCII,并确保不会有某个字节值为0的内码出现.有一个共同的特点是:它们都是局部的标准,只流行于某个地区/国家内.4.由于内码表都是各个国家独自制定的,同一个内码,在不同的国家表示的可能是不同的字符.(除了ASCII字符,ASCII字符在所有国家指定的内码表中都有同样的值.)不利于国家间的信息交换.于是UNICODE应运而生.UNICODE采用一种很简单的办法来解决这个问题.就是采用2个-UCS-2(或者4个字节-UCS-4

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。