各种常用字符编码详解【图文教程】,Unicode 是一个编码规范,并不是一个具体的编码

文章目录

  • 一、常见编码的比较,各个编码中各字符占用(字节数):
  • 二、简体中文编码发展史,编码出现时间和涵盖范围
  • 三、UTF-8、unicode与GBK编码转化
  • 一问一答
  • 其他
    • ASCII表
  • 参考文档

一、常见编码的比较,各个编码中各字符占用(字节数):

编码 英文 中文(简体) 中文(繁体)
ASCII 1 不支持 不支持
Unicode 4 4 4
UTF-8 1 3 3
UTF-16 2 4 4
UTF-32 4 4 4
GB2312 1 2 不支持
BIG5 1 不支持 2
GBK 1 2 2
GB18030 1 2 2
150-8859-1 1 不支持 不支持
  • 比如UTF-32 编码,英文,中文长度相同。说明这种编码为等长度编码,优点是解码速度快,缺点是浪费存储空间。
  • UTF-8 是可变编码,涵盖了所有的Unicode字符,所以UTF-8存储某些编码的时候需要4个字节。UTF-8 完全兼容ASCII编码,UTF-32是不兼容的,因为UTF-8表示ASCII只需要一个字节。

二、简体中文编码发展史,编码出现时间和涵盖范围

各种常用字符编码详解【图文教程】,Unicode 是一个编码规范,并不是一个具体的编码_第1张图片

三、UTF-8、unicode与GBK编码转化

  • unicode是一个编码规范,并不是一个编码实现方式(不理解这句话的可以看看后面的详细解释)
  • UTF-8 和 GBK 编码通过unicode规范进行转换
  • UTF-8涵盖了所有unicode字符,但是GBK 只考虑中文,在unicode中的一小部分的字符的编码。因为编码范围不同,所以如果UTF-8使用了GBK范围之外的编码必定会产生乱码。
    各种常用字符编码详解【图文教程】,Unicode 是一个编码规范,并不是一个具体的编码_第2张图片

一问一答

1. Unicode占几个字符?
Unicode是一个编码规范,并不是计算机内的一个具体的编码。ASCII编码也是编码规范,并不是计算机中具体的编码方式。Unicode 编码是一个二进制字符集,其只规定了字符的二进制代码,却没有规定这些二进制代码应该如何存储。

2. 什么是编码规范?
这里作者用口语化方式给大家解释解释,比如65代表’A’,但是在不同的编码中二进制的值是一样的,但是长度未必一样。比如二进制 “01000001” 和 “000001000001” 都是表示65,但是第二个二进制前面多了4个0,就是这种区别代表了编码实现方式。

3. utf-8和Unicode的关系
utf-8编码是基于Unicode标准实现的

4. 基于Unicode标准实现的编码一定容纳了所有Unicode规范的字符么?
不一定,Unicode是规范了世界上所有存在的文字符号,但是编码具体实现的过程之中,可能并不会实现所有的文字符号,这样的好处是可以节省存储空间和计算速度。比如编码可以之实现0~127的编码,那么编码就可以直接使用1个字节的空间存储就够了。

5. UTF-8的值可以直接对应Unicode的值么?
不行,需要算法转换

6. UTF-32的值可以直接对应Unicode的值么?
可以,所以效率贼高。这也是为什么UTF-32也被大量应用

7. utf8 和 utf8mb4 有什么区别(这个区别只在mysql数据库中)
这里就需要考虑到一个问题,正常的utf-8最大是支持4个字节的,但是在数据库mysql5中utf-8最大只支持到3个字节,所以mysql8中为了兼容4个字节的字符,就推出了utf8mb4。

其他

ASCII表

各种常用字符编码详解【图文教程】,Unicode 是一个编码规范,并不是一个具体的编码_第3张图片

参考文档

  • 各种字符编码详解【图文教程】
  • 一文读懂字符编码ASCII、Unicode与UTF-8
  • Unicode 和 UTF-8 详解
  • Unicode编码详解(四):UTF-16编码
  • utf8和utf8mb4的区别

你可能感兴趣的:(个人笔记,java,javascript,前端,编码)