关于计算机中的各种编码……

子谋 2011-12-01 05:14:02
加精
最近一直在复习,遇到神马各种码弄得我非常郁闷,最终专题研究了一下,留给自己一份材料,也分享给大家……
本文所说的编码,主要针对字符的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码的一个子集……
...全文
10198 143 打赏 收藏 转发到动态 举报
写回复
用AI写文章
143 条回复
切换为时间正序
请发表友善的回复…
发表回复
nsm1168 2012-07-16
  • 打赏
  • 举报
回复
很厉害啊
gxf15506906012 2011-12-13
  • 打赏
  • 举报
回复
简单点

各种编码方案<----转换----->ASCII<-----转换------>0 1
djog 2011-12-13
  • 打赏
  • 举报
回复
值得学习.研究研究.
zp111071 2011-12-13
  • 打赏
  • 举报
回复
好吧,我承认我是来拿分的
wuxinyanzi 2011-12-12
  • 打赏
  • 举报
回复
牛人啊。。。
  • 打赏
  • 举报
回复
总结的蛮全面的
xiangxinzijipeipei 2011-12-12
  • 打赏
  • 举报
回复
厉害,好
小默 2011-12-12
  • 打赏
  • 举报
回复
[Quote=引用 90 楼 healight 的回复:]

中国的GB2312/GBK什么的挺恶心的,为什么不直接utf-8呢,搞得linux和windows下非常难搞,和外国人分享一些东西还要注意编码。
唉,在中国windows/GBK什么的,真的是Linuxer很多时候难以逾越的鸿沟啊
[/Quote]
同意啊,干嘛那么固执啊,既然有人倡议了,大家就都用一种嘛,搞来搞去的很纠结啊,linux下写程序的同志们伤不起啊。
tj85673472 2011-12-12
  • 打赏
  • 举报
回复
计算机业的“创世纪”!
onlymearmstr 2011-12-10
  • 打赏
  • 举报
回复
很老的东西了。
戏子 2011-12-10
  • 打赏
  • 举报
回复
了解下
albert future 2011-12-10
  • 打赏
  • 举报
回复
高手 见识很多 编码 问题很烦
能否在Linux下常程访问Windows里的编码
dzq138 2011-12-09
  • 打赏
  • 举报
回复
....人家是来的积分的,太冷了
jmlm1234 2011-12-09
  • 打赏
  • 举报
回复
今天有时间来学习一下
tgxbqq 2011-12-09
  • 打赏
  • 举报
回复
不错不错。。学习了
Somnus69Akaciki 2011-12-09
  • 打赏
  • 举报
回复
总结的很详细。。。顶个。。。
qester 2011-12-09
  • 打赏
  • 举报
回复
不错 很有用
yaolinli111 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 98 楼 ruanjianaihaozhe886 的回复:]
很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为"字节"。 再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这机器称为"计算机"。 开始计算机只在美国用。八位的字节一共可以组合出256(2的8次方)种不同的状态。 他们把其中……
[/Quote]好
nettman 2011-12-09
  • 打赏
  • 举报
回复
感谢楼主分享,收藏备用!
xyqqtt21 2011-12-09
  • 打赏
  • 举报
回复
最让我头疼的是汉字编码了,有时候老是出乱码实在郁闷啊
加载更多回复(123)

3,286

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 实用资料发布区
社区管理员
  • 实用资料发布区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧