还不了解字符集编码吗

75次阅读

共计 1337 个字符,预计需要花费 4 分钟才能阅读完成。

字符集编码—ASCII/ISO-8859-1/GBK/unicode/UTF-8

为什么要编码?

答:要表示的符号太多,没有统一的标准,计算机无法识别没有标准的字符

定长编码便于计算机处理,GBK 不是定长编码,unicode 属于定长编码

ASCII—美国信息交换标准代码

用一个字节的低 7 位表示,最早出现的字符集,美国标准,2 的七次方的字符,共 128 种

问题:无法包含其他国家的字符

ISO-8859-1

一个字节(8bit 1byte),2 的八次方,共 256 种,相比于 ASCII 多了一倍字符集,包括拉丁字和西欧语

问题:依然无法包含所有其他国家的字符,中文

GBK

两个字节表示一个汉字,中国汉字专属编码格式 例:A5 B6

GB2312/GBK/GB18030

  • gb2312 只能表示简体字
  • gbk 编码能够用来同时表示繁体字和简体字,兼容 gb2312
  • gb18030 包含所有的中文文字

问题:无法让全世界编码规范统一,每个国家的字符集都不一样

unicode

为了解决全世界编码规范不同的问题,出现了 unicode 编码规范,它实现的编码方式可表示全世界所有的字符集,定长双字节,是一种 根本标准,具体使用是使用它的实现

Unicode 编码字符集旨在收集全球所有的字符,为每个字符分配唯一的字符编号即代码点(Code Point),从 U+0000 到 U+FFFF 被划分为 17 个平面,现在包括 1114111 个编码点

Code Point: 码点,简单理解就是字符的数字表示。

Unicode 当然是一本很厚的字典,记录着世界上所有字符对应的一个数字。具体是怎样的对应关系,又或者说是如何进行划分的,就不是我们考虑的问题了,我们只用知道 Unicode 给所有的字符指定了一个数字用来表示该字符。

\u597d->

问题:原来一个字节可以表示的字符现在需要两个字节了

UTF-8

unicode translation format-8,属于 unicode 的一种实现,使用 unicode 标准

为了解决 unicode 原来一个字节可以表示的字符现在需要两个字节的问题,出现了相对应的 utf-8,utf-16,utf-32

UTF- 8 是一种可变长编码,可以使用 1 - 4 个字节表示一个字符,完全兼容 ASCII

  1. 对于单个字节的字符,第一位设为 0,后面的 7 位对应这个字符的 Unicode 码点。因此,对于英文中的 0 – 127 号字符,与 ASCII 码完全相同。这意味着 ASCII 码那个年代的文档用 UTF-8 编码打开完全没有问题。
  2. 对于需要使用 N 个字节来表示的字符(N > 1),第一个字节的前 N 位都设为 1,第 N + 1 位设为 0,剩余的 N – 1 个字节的前两位都设位 10,剩下的二进制位则使用这个字符的 Unicode 码点来填充
Unicode 十六进制码点范围UTF-8 二进制
0000 0000 – 0000 007F0xxxxxxx
0000 0080 – 0000 07FF110xxxxx 10xxxxxx
0000 0800 – 0000 FFFF1110xxxx 10xxxxxx 10xxxxxx
0001 0000 – 0010 FFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

由此可以根据编码表区别这个字符是 1 个字节还是 n 个字节

参考博客:

https://www.ibm.com/developer…

正文完
 0