首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

浅谈字符编码(1)- 基本概念

2012-07-16 
浅谈字符编码(一)- 基本概念首先了解几个概念:字符集,编码字符集,字符编码方案,编码勤快点,画个鸟图吧,(顺

浅谈字符编码(一)- 基本概念
首先了解几个概念:字符集,编码字符集,字符编码方案,编码
勤快点,画个鸟图吧,(顺便推荐下EA这个画鸟图的工具,哈)


字符集:
        ·字符集是一个字符的集合,它规定了这个集合包含哪些字符 。比如我们常说的ASCII字符集,Unicode字符集等等。其中Unicode字符,几乎包含了世界上所有语言的文字。既然有了Unicode,为什么还要ASCII等字符集?这就涉及到了字符编码的发展。计算机发展最初阶段,主要以美国为主的英语系国家主导,英语只需要26个字母,即使区分大小写也只是52个字符,于是ASCII(美国信息互换标准码)出现了,由128个字符组成,包含 52个字母、10个数字、一些标点符号和一些控制字符。后来计算机技术在世界普遍发展,像我们这些非英语系的国家的为了显示自己的文字,ASCII显然就力所不及了,所以不得不一开始就得面对字符编码的问题,不同国家不同地区都创建了自己的编码标准。例如中国大陆的GB2312及后来的GBK,台湾的BIG5,日本的JIS。再后来,为了和谐,为了跨平台语言信息交换的便利,Unicode出现了...

编码字符集:
        ·由于计算机只识别0101,字符集想要被计算机表示,必须将字符映射为数字,而这正是由编码字符集定义的。一个编码字符集对应一个字符集,如上图所示,例如ASCII编码字符集对应ASCII字符集。

字符编码方案:
       ·字符集到编码字符集又带来了新的问题,如上图箭头所示,因为在计算机中,数字最终是要由01构成的字节序列来表示的。而这就需要考虑许多问题,例如用几个字节来表示,如何映射才能最节省空间,多个字节的表示在跨平台存储,网络传输时字节顺序问题(大端字节/小端字节)等等。而字符编码方案就是针对编码字符集如何映射成字节序列问题的。

       ·例如,对于用几个字节表示的问题,有两种方式,一种称为定长编码,一种称为变长编码。所谓定长编码,指不管字符对应的数字是几,始终用同样长度的字节来表示,例如字符集包含小于65536(两字节)的字符,定长编码对每个字符都用两字节来表示,这种编码方案简单直接,但是问题也显而易见,它对所有字符不加以区分都使用同样的长度来编码,这会很浪费存储空间,GB2312就是采用这种方式。而使用变长编码方式 ,它对常用的字符使用一个字节来编码,对不常用的字符使用两个字节来编码,而对非常生癖的字符使用三个或更多的字节来编码。Unicode编码字符集的一种变长编码方案是就是UTF-8,它的定长编码方案称为UTF-16

       ·而对于多字节顺序问题,先说涉及到的两种字节顺序。大端字节顺序(BE,big endian):如果数字数值的最高字节-big end(大端),位于低位地址,那么系统就是大端字节顺序,Moto的CPU系列,SUN的Space工作站,以及PowerPC的CPU架构都采用大端字节顺序;小端字节顺序(LE,little endian):如果最低字节最先保存在内存中,那么是小端字节顺序,Intel处理器使用小端字节顺序。而对于网络传输,在IP协议规定了使用大端的网络字节顺序,因此为了适应在各个系统间数据传输,所有的IP分组报文的协议部分中使用的多字节数值必须先在本地主机字节顺序和通用的网络字节顺序之间进行转换。既然有两种字节顺序,一定会涉及到如何区分的问题,方式则是在最前面加多2个字节,OxFEFF表示BE,而0xFFFE表示LE,这即所谓的BOM(Byte Order Mark)

编码:
         ·编码是编码字符集和字符编码方案组合的简称 ,它指将字符集中的字符映射成字节序列。例如UTF-8是一种编码,它是Unicode编码字符集和UTF8编码方案的一个组合。GB2312也是一种编码,它的编码字符集就是编码的简体中文字符集,编码方案采用定长编码。因为大多数编码字符集都只有一种编码方案,这样的编码字符集(或者说编码)包括GB2312, GBK, ASCII, ISO8859-1等,此时经常混用编码字符集和编码这两个概念。但是当编码字符集存在多种编码方案时,就有必要区分编码字符集和编码了,例如我们说Unicode时一般是指编码字符集,说 UTF-8,UTF-16时才是指编码

热点排行