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

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

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

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

在这里插入图片描述

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

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

一问一答

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表

在这里插入图片描述

参考文档

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值