首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 24-03-05 01:20
  • 3566
  • 10943
blog.csdn.net

640?wx_fmt=gif

640?wx_fmt=jpeg

640?wx_fmt=jpeg

当天下午

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

————————

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

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

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

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

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

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

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

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

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

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

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

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

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

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

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

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

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

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

什么是编码空间呢?前面说了 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 号平面 - -)。其它平面叫做补充平面,大多是空的。

640?wx_fmt=jpeg

640?wx_fmt=jpeg

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

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

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

640?wx_fmt=jpeg

640?wx_fmt=jpeg

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

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

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

免责声明:本文为作者投稿,内容版权归作者所有,文中所使用卡通形象来源于网络,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 "点个好看吧!"


640?wx_fmt=gif点击“阅读原文”,打开 CSDN App 阅读更贴心!

640?wx_fmt=png 喜欢就点击“好看”吧!
CSDN
微信公众号
成就一亿技术人
注:本文转载自blog.csdn.net的CSDN资讯的文章"https://blog.csdn.net/csdnnews/article/details/85760123"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top