字符编码梳理
发布日期:2021-07-26 10:17:50 浏览次数:7 分类:技术文章

本文共 1573 字,大约阅读时间需要 5 分钟。

不同字符编码:ASCII ,ISO8859-1,GB2312,GBK,UTF-8

字符编码:

  • 规定了某个文字对应的二进制数字存放方式(编码)和某串二进制数值代表了哪个文字(解码)的转换关系
  • 编码与解码的转换关系。

为什么有这么多的字符编码

       由于计算机的发展,刚开始计算机由美国人发明,他们只使用ASCII码即可表示所有的字符,但是之后越来越多的国家开始使用计算机,为了满足他们的需求于是有了其他的标准,新的标准表示的范围大了,必然所占用的空间增大,引起原本只需要使用ASCII国家的不满,于是为了减少占用的空间和硬盘空间,所以有了UTF-8等不定长的字符编码。

       总结一下:1. 满足不同国家的需求 2. 减少占用的空间和硬盘空间

各个字符编码的实现

字符编码

是否定长

占用空间

实现原理

备注

ASCII

单字节

使用单字节8位,前127个存储英文字母即标点符号

老美发明

ISO8859-1

单字节

扩展ASCII码,在128-255位置编入了新字符。

西欧国家使用

GB2312

1-2字节,不定长编码

高低位都存放大于127的数字,兼容ASCII码(英文1个字节,中文2个字节)

GBK2312只囊括简体中文

GBK

1-2字节,不定长编码

扩展GB2312,高位存放大于127的数字,低位将127之前的数字也囊括了

GBK囊括繁体中文

UTF-8

1-4字节,不定长编码

是一种Unicode的一种编码实现

老美不满意Unicode的ASCII的双字节编码

GB2312:

       兼容ASCII码,当是英文字符时,使用一个字节进行存储和读取,当是中文字符时使用两个字节进行存储和读取。存储中文时,高位和低位的最高位皆为1,存放大于127的数字,即取高位字节时,若大于127则表示是中文字符,将读取双字节进行识别,若小于127,则认为是英文字符,单字节识别。

GBK:

       对GB2312的扩展,低位不再存储大于127的数字,将低于127的数字也包括进来,囊括了繁体字符。

UTF-8的编码规则:

UTF-8最大的特点,变长的编码方式,使用1-4个字节表示一个符号

  1. 对于单字节的符号,字节的最高位设为0,后面7位为这个符号的Unicode码
  2. 对于n字节的符号,第一个字节的前n位皆为1,n+1位为0,后面字节的前两位开头一律为10,剩下的为该字符的Unicode码。

0xxxxxxx

110xxxxx 10xxxxxx

1110xxxx 10xxxxxx 10xxxxxx

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

 

UnicodeUTF-8有什么关系

  • Unicode是字符集,是用双字节编码表示,囊括了全球所有的字符,为每一个字符分配一个唯一的ID,不管ID如何存储。(对于ASCII码,高位补0)
  • UTF-8是字符编码规则,UTF-8是Unicode的实现方式之一,定义如何存储编码ID的一种方法,将码位转换为字节序列的规则。这样让计算机看到某个标记就知道要读取几个字节的代码,避免问题的发生。(容错性)

 

不考虑历史因素,从技术角度解释为什么在unicode和UTF-8大行其道的同时,GB2312和GBK仍在广泛使用。

       三者皆使用了变长编码。GB2312和GBK表示中文字符占用2个字节,兼容ASCII码;UTF-8也兼容ASCII码,但UTF-8中的中文字符需要使用3-4个字节表示,大部分为3个字节。因此对于中英文混合编写的使用GB2312和GBK更省空间、效率更高。

 

参考:

  • 不同字符编码区别:ASCII ,ISO8859-1,GB2312,GBK,Unicode,UTF-8:
  • Unicode 和 UTF-8 有何区别?:
  • UTF-8编码原理:
  • 字符集与编码(三)——定长与变长:

转载地址:https://blog.csdn.net/qq_39557240/article/details/106531064 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:分布式理论(一) CAP理论
下一篇:大并发服务器框架设计

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月10日 18时43分26秒