计算机字符编码


编码与解码

编码方式:计算机中所有的信息都采用0,1这样的二进制位来表示,那么肯定存在特定的映射规则(例如:0010 0011 -> #) 我们将这种一一对应的规则称为编码(方式)。 常见的编码方式有 ASCII、UTF-8、GBK等

编码:我们希望将 Hi! 这句话保存在磁盘上,由于计算机只能存储 01 因此我们可以将 Hi! 按照某种编码方式(ASCII)转化为 01001000 01101001 00100001 来存储。从字符串到 二进制的过程叫 编码

解码:当我们需要将磁盘上的一句话显示在屏幕上时,先从磁盘读取二进制数据 ——01001000 01101001 00100001, 然后按照我们之前使用的 ASCII 编码方式(对应关系集合)将二进制转为 Hi!。从二进制到字符串的过程叫 解码

总结:编码和解码是自然语言符号二进制符号相互转化的过程,要实现一一对应的转换,就需要依赖某种对应规则,而这种对应规则就是我们所说的编码方式。

ASCII 编码

机器存储数据按照字节来存储,一个字节 8位,每一位有01两种状态。因此一个字节理论上可以表示 2^8 = 256 个不同的状态,每个状态对应一个字符就是256个字符。

标准的 ASCII 编码标准 使用最低7位(后7位)表示字符(最高位为0)共 128个字符。

  • 0~31、127 为不可见字符(共 33 个)
  • 32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字。
  • 65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等
    ASCII 对照表:

其他编码

英语中128个符号编码就够了,但是随着计算机的发展,网络链接了不同语言的地区和国家,即使将ASCII码中保留的最高位用掉也不够表示全世界各种语言的自然符号。

因此各个国家和地区都推出了自己地区专用的编码方式,例如中国的GBKGB18030GB2312等,但是使用地区编码的字符无法在其他地区使用。由于编码的不一致,信息交换的成本过高,例如日本的游戏中国用户无法使用,中国发送的电子邮件法国的朋友无法阅读... ...

高昂的信息交换成本使得这样一种编码方式的诞生成为必然。即这种编码将世界上所有的符号都纳入其中,每一个符号都给予一个独一无二的编码,它将彻底的解决乱码问题。它就是 Unicode,就像它的名字都表示的,这是一种所有符号的通用编码。

国标 GBK、GB18030、GB2312

国标编码,是一种兼容ASCII编码的汉字双字节编码字符集(由于ASCII码高位为0因此,国标码兼容ASCII码部分为单字节)常用的国标码中 GB18030 字符集更加丰富。

Unicode

注意Unicode 只是一个字符集,它只规定了自然符号和二进制码的映射关系,但没有规定这个二进制码的存储策略。

由于 Unicode字符集过于庞大,在使用中会占用2~4倍的存储空间,并且很多字符存储中会出现大量冗余字节(设每个字符占4字节,英文仅需要一个字节表示,那所有的 ASCII 字符前三个字节全为 0,这是无法接受的)

纯文本文件采用ASCII码表示为 1M。若内容不变改为Unicode编码表示则会变成4M,直接扩大了4倍。无论从何种角度来看这都是无法接受的。

UTF-8

注意: 它不是 Unicode字符集子集,而是Unicode实现方式之一

特点

  • 它是一种变长的编码方式。
  • 它使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
  • 它兼容 ASCII编码

编码规则

1 与GBK的策略一致,当高位为0时,认为是ASCII字符,反之为其他字符。
2 以首个字节的高位的第一个0前的1个数标记该字符所占字节数,其后为 unicode 码值。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM