我之前老是有这种感觉, 就是明明已经看过很多关于字符编码的资料了, 感觉字符编码相关的知识点不难理解, 觉得自己已经把字符编码给弄懂了, 但当别人问我到底什么是字符编码, Unicode 是什么啊, UTF-8 又是什么的时候, 我又结结巴巴的说不清楚, 或者只能给个含糊不清的回答, 老是把相关的知识点给弄混. 所以这篇博客, 就是要把字符编码给真正的搞懂, 把相关的知识点梳理清楚.
到底什么是字! 符! 编! 码?!!!
我们所理解的 "字符编码(名词)" 包含两个部分:
1. 字符集
2. 编码规则
字符集, 做了什么事情呢? 其实就是给一个字符指定一个数字编号,
就像我们每个人都会有一个身份证号一样, 通过一个身份证号可以对应某一个人,
那我们通过数字编号, 就可以对应到某个具体的字符了
所以, 简单来说, 字符集就相当于一个大的数据库, 这个数据库中包含了两个字段(列): 字符, 和字符对应的编号
+------+----------+
| 字符 | 编号 |
- +------+----------+
- | a | 97 |
- +------+----------+
- | b | 98 |
- +------+----------+
编码规则, 就是如何对 "字符的编号" 进行编码的一种规则, 比如我们现在要将字母 "a" 保存到硬盘中,
"a" 对应的编号是 97, 所以我们只要保存 97 就行了, 按照 ASCII 的编码规则, 使用 8 位二进制数 (第 1 位二进制为 0) 来进行编码,
97 在经过编码后的存储格式就为 01100001
为什么要有字符编码?
归根结底, 计算机只认识 0 和 1(二进制), 不是 0 和 1 的数字, 我们可以通过位数转换, 转换成二进制
那对于字符, 计算机要怎么识别呢?
将每个字符都指定一个数字编号(字符集), 再将数字编号转为二进制(编码规则), 这样计算机就能识别了
Unicode 与 UTF-8
首先, Unicode 也是包含两个部分: 字符集 + 编码规则
你可以将 Unicode 字符集理解为是包含了全世界大多数语言字符与字符编号的超大数据库
而 UTF-8 就是 Unicode 的一种编码规则, 除了 UTF-8, 还有 UTF-16,UTF-32 等编码规则
UTF-32: 不管你的编号是多少, 即使是 1, 我都给你转为用 32 位的二进制: 00000000 00000000 00000000 00000001
UTF-16: 能转为 16 位就转为 16 位, 16 位不够就转为 32 位
UTF-8: 能转为 8 位就转 8 位, 8 位不够就转 16 位, 16 位不够转 32 位
注:
只是对相关概念做了简单阐述, 目的是理清字符编码的相关知识点, 如果对字符编码有深入了解的需求, 请自行查阅相关资料
来源: http://www.bubuko.com/infodetail-3355789.html