漫画:什么是字符集和编码?ASCII、UTF-8、UTF-16、UTF-32 又是什么?

2019 年 1 月 4 日 CSDN

当天下午

————————

在计算机底层,比如说你的名字“小萌”在计算机中并不是文字的形式,而是一串二进制数字,如“011001100110…”

人类只认识文字,可惜计算机只认 0 和 1,双方都不能妥协,那就必须要有一个从文字到 0、1 的映射了。

从我们可以看到的文字到 0、1 的映射称为编码,反过来从 0、1 到文字叫解码。这个就是编码的含义。

因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用 8 个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是 255(二进制11111111=十进制 255),0 - 255 被用来表示大小写英文字母、数字和一些符号,这个编码表被称为 ASCII 编码,比如大写字母 A 的编码是 65,小写字母 z 的编码是 122。

Unicode 编码定义了这个世界上几乎所有字符(就是你眼睛看的字符,比如ABC、汉字等)的数字表示,而且 Unicode 还兼容了很多老版本的编码规范,例如刚刚讲过的 ASCII 码。

我们国家的每一个人都对应唯一的一个身份证号,而 Unicode 也为每个字符发了一张身份证,这张“身份证”上有一串唯一的数字 ID 确定了这个字符。

这串数字在整个计算机的世界具有唯一性,Unicode 给这串数字 ID 起了个名字叫[码点]。

这个“Unicode 转换格式”是为了解决“码点”在计算机存储方式而设计的。

码点”经过映射后得到的二进制串的转换格式单位称之为“码元”(Code Unit)。码点就是一串二进制数,码元就是切分这个二进制数的方法。

举个例子,如果有一个字符的码点二进制表示有 n 字节(n*8 个二进制数),其码元为 8 位(1 个字节),那么其拥有码元 n 个。

Unicode 编码发展到今天扩展到了 21 位,为啥扩展到 21 位了呢?因为一开始老美只考虑自己那 26 个英文字母和数字,随着越来越多的国家的语言语言编码,Unicode 不得继续扩展,目前 21 位已经足够使用。

UTF-32 是最好理解的一个了。UTF-32 也就是说它的码元是 32 位,每 32 位去读一下码点,而码点是 Unicode 给字符的编码,前面也说了,最长才 21 位,因此每一个 UTF-32 值都可以直接表示对应的码点。

什么是编码空间呢?前面说了 Unicode ,它是 21 位的。这 21 位提供了 1,114,112 个码点,编码空间就是对应这 1,114,112 个码点。

对了这里要说一下,这么多码点并不代表有这么多字符,目前大概只有 10% 的空间被使用了,人类社会还没创造出 1,114,112 这么多的字符。

编码空间被分成 17 个平面(plane),每个平面有 65,536 个字符(正好填充 2 个字节,16 位)。0 号平面叫做“基本多文种平面”(BMP, Basic Multilingual Plane),涵盖了几乎所有你能遇到的字符,除了 emoji(emoji 位于 1 号平面 - -)。其它平面叫做补充平面,大多是空的。

UTF-16 要常见得多,它的码元是 16 位的,也就是说每 16 位去读一下码点,获取码点的前 16 位数字,直到读取完成。

编码空间这里要用上了哈,BMP 平面(也就是前面说的基本多文种平面)中的每一个码点都直接与一个 UTF-16 的码元一一映射。

由于 BMP 几乎包括了所有常见字符,UTF-16 一般需要 UTF-32 大约一半的空间。至于其它平面里很少使用的码点都是用两个 16 位的码元来编码的。

UTF-8 使用一到四个字节来编码一个码点。从 0 到 127 的这些码点直接映射成 1 个字节(对于只包含这个范围字符的文本来说,这一点使得 UTF-8 和 ASCII 完全相同)。接下来的 1,920 个码点映射成 2 个字节,在 BMP 里所有剩下的码点需要 3 个字节。Unicode 的其他平面里的码点则需要 4 个字节。UTF-8 是基于 8 位的码元的,因此它并不需要关心字节顺序(因为字节就是 8 位的呀,其它 UTF-16 和 UTF-32 在不同的机器编译环境下需要考虑字节的顺序问题)。

作者:乔戈里,哈工大计算机本硕,百度工程师,做公众号就是想和大家交个朋友。

免责声明:本文为作者投稿,内容版权归作者所有,文中所使用卡通形象来源于网络,CSDN 发布此文出于传递更多信息之目的,CSDN 不因此向用户承担任何责任。



 热 文 推 荐 


 Android 要收费?周鸿祎:这是迟早的事!

☞ 程序员版“吐槽大会”: 国产综艺节目年终盘点

☞ AI 外挂!百度 Lens 是如何突破人眼视觉极限的?

☞ 比特币拒绝第340次“被死亡”

☞ 有问有答 | 分布式服务框架精华问答

☞ 程序员有话说 | 大专生毕业 6 年月薪 3W+:不从众也不普通

☞ 网友们票选的2018 Best Paper,你pick谁?

☞ 老程序员肺腑忠告:千万别一辈子靠技术生存!

print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!\n");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"


点击“阅读原文”,打开 CSDN App 阅读更贴心!

喜欢就点击“好看”吧!
登录查看更多
0

相关内容

CVPR 2022 将于2022年 6 月 21-24 日在美国的新奥尔良举行。CVPR是IEEE Conference on Computer Vision and Pattern Recognition的缩写,即IEEE国际计算机视觉与模式识别会议。该会议是由IEEE举办的计算机视觉和模式识别领域的顶级会议,会议的主要内容是计算机视觉与模式识别技术。

知识荟萃

精品入门和进阶教程、论文和代码整理等

更多

查看相关VIP内容、论文、资讯等
【实用书】Python机器学习Scikit-Learn应用指南,247页pdf
专知会员服务
255+阅读 · 2020年6月10日
最新《自动微分手册》77页pdf
专知会员服务
97+阅读 · 2020年6月6日
Python地理数据处理,362页pdf,Geoprocessing with Python
专知会员服务
110+阅读 · 2020年5月24日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
115+阅读 · 2020年5月10日
机器学习速查手册,135页pdf
专知会员服务
335+阅读 · 2020年3月15日
【新书】Python数据科学食谱(Python Data Science Cookbook)
专知会员服务
113+阅读 · 2020年1月1日
【机器学习课程】Google机器学习速成课程
专知会员服务
161+阅读 · 2019年12月2日
图解NumPy,这是理解数组最形象的一份教程了
机器之心
5+阅读 · 2019年7月12日
从 one-hot 到 BERT,带你一步步理解 BERT
数说工作室
21+阅读 · 2019年6月25日
一步步理解BERT
AINLP
34+阅读 · 2019年6月19日
Python数据可视化2018:为什么这么多的库?
Python程序员
4+阅读 · 2019年1月2日
【干货】深入理解变分自编码器
专知
21+阅读 · 2018年3月22日
已删除
生物探索
3+阅读 · 2018年2月10日
漫画: 什么是人工智能?
大数据技术
4+阅读 · 2018年1月19日
473个模型试验告诉你文本分类中的最好编码方式
炼数成金订阅号
7+阅读 · 2017年8月17日
Arxiv
4+阅读 · 2019年12月2日
Arxiv
8+阅读 · 2019年3月21日
Star-Transformer
Arxiv
5+阅读 · 2019年2月28日
Arxiv
4+阅读 · 2018年10月31日
Arxiv
11+阅读 · 2018年5月13日
Arxiv
25+阅读 · 2017年12月6日
VIP会员
相关VIP内容
【实用书】Python机器学习Scikit-Learn应用指南,247页pdf
专知会员服务
255+阅读 · 2020年6月10日
最新《自动微分手册》77页pdf
专知会员服务
97+阅读 · 2020年6月6日
Python地理数据处理,362页pdf,Geoprocessing with Python
专知会员服务
110+阅读 · 2020年5月24日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
115+阅读 · 2020年5月10日
机器学习速查手册,135页pdf
专知会员服务
335+阅读 · 2020年3月15日
【新书】Python数据科学食谱(Python Data Science Cookbook)
专知会员服务
113+阅读 · 2020年1月1日
【机器学习课程】Google机器学习速成课程
专知会员服务
161+阅读 · 2019年12月2日
相关资讯
图解NumPy,这是理解数组最形象的一份教程了
机器之心
5+阅读 · 2019年7月12日
从 one-hot 到 BERT,带你一步步理解 BERT
数说工作室
21+阅读 · 2019年6月25日
一步步理解BERT
AINLP
34+阅读 · 2019年6月19日
Python数据可视化2018:为什么这么多的库?
Python程序员
4+阅读 · 2019年1月2日
【干货】深入理解变分自编码器
专知
21+阅读 · 2018年3月22日
已删除
生物探索
3+阅读 · 2018年2月10日
漫画: 什么是人工智能?
大数据技术
4+阅读 · 2018年1月19日
473个模型试验告诉你文本分类中的最好编码方式
炼数成金订阅号
7+阅读 · 2017年8月17日
相关论文
Arxiv
4+阅读 · 2019年12月2日
Arxiv
8+阅读 · 2019年3月21日
Star-Transformer
Arxiv
5+阅读 · 2019年2月28日
Arxiv
4+阅读 · 2018年10月31日
Arxiv
11+阅读 · 2018年5月13日
Arxiv
25+阅读 · 2017年12月6日
Top
微信扫码咨询专知VIP会员