日期:2014-05-16  浏览次数:20981 次

关于计算机中的各种编码……
最近一直在复习,遇到神马各种码弄得我非常郁闷,最终专题研究了一下,留给自己一份材料,也分享给大家……
本文所说的编码,主要针对字符的IO的编码,不涉及数字编码,视频、音频编码和校验码之类其他编码……
这些资料都是收集自网上各种地方,由于太碎了,所以就不声明引自哪篇文章了……

一、ASCII码
最简单也是最离不开的一种编码,直接对应英文和键盘,计算机中的任何键盘输入都离不开ASCII,每次按下某个键,计算机都得到一个ASCII,无论你输入的是拼音还是五笔,计算机只认识ASCII……

二、汉字编码
1、输入码、内码、字形码
输入码:举例来说,我们所说的输入码就是输入法,比如拼音、五笔什么的,一串字母表示一个汉字(不讨论多个汉字的问题)
内码:汉字在计算机中用于运算和存储所使用的代码,这个代码是统一的
字形码:就是点阵,那些坐标亮,哪些不亮,然后让你看着是一个汉字的形状……

2、区位码、国标码、汉字内码
区位码:就是按照行列的形式吧汉字放在“格”中,然后通过行列数来确定某个汉字的方法,行表示区,列表示位,所以叫区位码。需要特别说明的是,区位码(包括国标码)只是一种编码方法并不是特指某一个编码(比如gb2312)……
国标码:由于当初设计区位码的时候,考虑的比较少,区位码和通信中的控制字符存在二义性,所以ISO就规定将区位码加上2020H变成国标码以消除这种二义性……
汉字内码:虽然解决了通信的问题,但是国标码在计算机的存储中又和ACSII码之间存在二义性,所以又规定在国标码的基础之上再加上8080H变成汉字内码,这样,汉字就可以在计算机中不和任何其他字符编码产生冲突了……
这里需要另外说明一下的是交换码,交换码是一种描述功能的编码(和内码是一起的),与区位码这种描述编码方式的编码没有交集。它表示一种字符在进行数据交换的过程中采用的一种双方都认可的,不会产生冲突的编码方式。实际上ASCII就是即是内码(不是汉字内码,就叫内码),也是交换码,而汉字编码中只有汉字内码才是交换码,区位码和国标码只是给人看的编码,必须变成内码才能被计算机使用……

3、GB2312、GBK、GB18030
这三种编码如果要和上面的汉字编码方式对应,都应该算作区位码,也就是说都是按照行列的形式用数字标识汉字的。但是很多人会想当然的认为看到了GB就是国标码,实则不然,这里的GB表示我们提出了一个汉字的国际标准编码方式,而我们上面说的国标码是一个技术上的概念(但是都叫国标码,所以经常容易被人误解)。况且这三种编码并不都是国家标准,我们最常见的GBK就不是国家标准,而是在GB2312之上的一种扩展,可是算是事实上的标准。这三种编码的兼容顺序是GB18030兼容GBK,GBK兼容GB2312……

unicode(万国码,名字很囧)
这种编码方式是为了囊括全世界的语言而提出的一种编码标准,需要注意的是,这个标准是给人看的标准而不是给计算机看的标准,所以我们讨论编码的时候从来不讨论unicode编码,而是讨论utf8,utf16和utf32,这三种编码是专门为计算机设计的编码,虽然都是根据unicode标准,但却是3种不同的格式,我们通常说的unicode编码,实际上指的是utf16编码……
另外,汉字的编码(区位码)和ASCII是不兼容的(所以要变成内码,利用高位来判断是哪种编码),但是unicode编码和ASC
II是兼容的,也就是说ASCII是unicode码的一个子集……

------解决方案--------------------
我之前看了篇文章,那讲的叫做一个清晰易懂,搜一搜可能找到。。 不过没讲这些内码神秘的。。
------解决方案--------------------
看看吧,今天上课讲的内容就是这些东西
------解决方案--------------------
恩,挺好的
------解决方案--------------------
呵呵,好没认真了解这些代码的具体意思
------解决方案--------------------
路漫漫啊。。。。太多要学
------解决方案--------------------
我觉得楼主还少了几种比较重要的编码,原码,补码等
------解决方案--------------------
不错,顶,写网页的时候,声明字符编码是UTF-8,如果保存时ASCII 用Chrome浏览器打开,如果有中文,一定会出现乱码,要注意的真多,编码一致一定要注意。
------解决方案--------------------
要了解代码的具体意思
------解决方案--------------------
挺有意思
------解决方案--------------------
不错啊
------解决方案--------------------
学习学[color=#00FF00][/color][b][/b][size=18px][/size]习
------解决方案--------------------
勤学哦
------解决方案--------------------
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。

------解决方案--------------------
资深大牛写的,通俗易懂,转了,分享下:

很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为"字节"。 再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这机器称为"计算机"。 开始计算机只在美国用。八位的字节一共可以组合出256(2的8次方)种不同的状态。 他们把其中的编号从0开始的32种状态分别规定了特殊的用途,一但终端、打印机遇上约定好的这些字节被传过来时,就要做一些约定的动作。遇上00x10, 终端就换行,遇上0x07, 终端就向人们嘟嘟叫,例好遇上0x1b, 打印机就打印反白的字,或者终端就用彩色显示字母。他们看到这样很好,于是就把这些0x20以下的字节状态称为"控制码"。 他们又把所有的空格、标点符号、数字、大小写字母分别用连续的字节状态表示,一直编到了第127号,这样计算机就可以用不同字节来存储英语的文字了。大家看到这样,都感觉很好,于是大家都把这个方案叫做 ANSI 的"Ascii"编码(American Standard Code for Information Interchange,美国信息互换标准代码)。当时世界上所有的计算机都用同样的ASCII方案来保存英文文字。 后来,就像建造巴比伦塔一样,世界各地的都开始使用计算机,但是很多国家用的不是英文,他们的字母里有许多是ASCII里没有的,为了可以在计算机保存他们的文字,他们决定采用127号之后的空位来表示这些新的字母、符号,还加入了很多画表格时需要用下到的横线、竖线、交叉等形状,一直把序号编到了最后一个状态255。从128到255这一页的字符集被称"扩展字符集"。从此之后,贪婪的人类再没有新的状态可以用了,美帝国主义可能没有想到还有第三世界国家的人们也希望可以用到计算机吧! 等中国人们得到计算机时,已经没有可以利用的字节状态来表示汉字,况且有6000多个常用汉字需要保存呢。但是这难不倒智慧的中国人民,我们不客气地把那些127号之后的奇异符号们直接取消掉, 规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出