专栏首页AstropeakASCII、 Unicode 和 UTF8

ASCII、 Unicode 和 UTF8

  • ASCII: 英文字母与数字编号的一一对应。每个英文字母对应一个编号。范围0~127
  • Unicode: 全世界所有语言中字符与数字编号的一一对应。也即为存在的每个字符指定一个唯一的编号。范围为0~0x10FFFF。

所以,

ASCII与Unicode是类似的东西,都是为一个字符指定一个唯一的数字编号

只不过Unicode的范围更大,能够表示更多的字符。

在计算机的世界里,只有数字,而不会有什么字符。一个字符在计算机看来就是一个数字。ASCII与Unicode就是将字符与数字一一对应起来的映射。比如对于字符'A',在计算机看来,它就是一个数字65。

当字符串被写入文件时,也是将字符串中每个字符对应的数字编号保存在文件。

以上是ASCII和Unicode的相同点。那么,二者有什么区别?

一个显著的区别是,对于同一段文本,二者保存到文件后占用的字节数不同。对于ASCII,每个数字编号占用一个字节。 而对于Unicode,每个编号则需要占用3个字节。因此对于同一段文本:'abcd',采用ASCII格式保存时,文件的大小为4个字节。 采用Unicode保存时,文件的大小则为12个字节。

由此也可看出,当待保存文本为纯英文字母时,

采用Unicode的存储效率太低了

UTF8便是为了解决Unicode存储效率低下而产生的。具体的规则就不讲了,先来看一下UTF8能够达到的效果。

对于相同的文本:'abcd',Unicode需要12个字节,而UTF8只需要4个字节(和ASCII一样,达到最优)。

UTF8之所以可以用一个字节存储英文字母,是因此它使用了变长的编码方式。也即,对于英文字母,它采用一个字节保存这个字符。对于英文字母之后的字符,它采用两个字节保存这个字符。对于再之后的字符,采用三个字节保存。最多采用四个字节保存一个字符。

所以UTF8对于存储英文字母的高效率来源于对之后字符保存效率的牺牲。这里的合理性在于:如果待保存的文本中字符大多数为英文字母,则存储效率能够提高,因为大多数字符都是采用一个字节保存。

总结来说,

UTF8是对Unicode在存储效率上的优化

以上便是三者的关系。

ASCII和Unicode都是为一个字符指定一个唯一的数字编号,Unicode能够表达更多的字符,相当于是ASCII的扩展。Unicode存在存储效率低下的问题,UTF8是在这个方面对Unicode的优化。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 掌握Python 装饰器,其实只需要一盏茶的功夫

    用户2176428
  • Python:怎样用线程将任务并行化?

    用户2176428
  • 为什么不需要为Python对象添加 getter 和 setter

    用户2176428
  • 目前深度学习最强框架——PyTorch

    PyTorch由于使用了强大的GPU加速的Tensor计算(类似numpy)和基于磁带的自动系统的深度神经网络。这使得今年一月份被开源的PyTorch成为了深度...

    BestSDK
  • 微软CEO:人工智能是一场技术的“终极突破”

    量子位 | 李林编译 微软首席执行官Satya Nadella昨天在印度的公开活动上发表讲话时,强调人工智能(AI)的巨大潜力,并称之为技术的“终极突破”。 “...

    量子位
  • 002.RHCS-配置Ceph存储集群

    Red Hat Ceph存储池池是Red Hat Ceph存储集群用于存储对象的逻辑分区。

    木二
  • 融了1000万,只为让它们好好吃饭!

    镁客网
  • 太有意思了,教你实现实现王者荣耀团战!

    https://juejin.im/post/6856743286653386760

    Java技术江湖
  • 4KB 扇区磁盘上的 Linux:实际建议

    为何更改为 4096 字节扇区? 如果您熟悉磁盘结构,就知道磁盘是被分解成扇区 的,大小通常是 512 字节;所有读写操作均在成倍大小的扇区中进行。仔细查看,就...

    小小科
  • 盘点资本市场看好的“明日之星”

    创业大潮进入鼎盛时期,该创业的、想创业的创业者基本上都已经入局,海量创业项目映在眼前,某种程度上,资本、媒体、互联网评论家们的需求越来越一致:都在关心哪些行业、...

    曾响铃

扫码关注云+社区

领取腾讯云代金券