python中的编码与解码


自我学习使用

Unicode

  • Unicode只是一个符号集(而非编码方式),它只规定了符号的二进制代码。(囊括世界上所有文字)
  • 因为Unicode如果统一规定3或4个字节表示,那么对于英文字母(1 Byte)在存储上过于浪费,所以又出现了许多不同的根据Unicode编码的方式。UTF-8就是其中之一。

UTF-8

  • UTF-8 是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度
  • 编码规则
    1. 对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。即对于英语字母,UTF-8 编码和 ASCII 码是相同的。
    2. 对于n字节的符号(n > 1),第一个字节的前n位都设为1,第n + 1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。
Unicode符号范围     |        UTF-8编码方式
(十六进制)          |              (二进制)
----------------------+----------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

根据上表,解读 UTF-8 编码非常简单。如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。

  • 一般的Unicode编码指UCS-2方式(定长),即每个字符2个字节
  • UTF-8,是对Unicode编码的压缩和优化,它不再要求最少使用2个字节,而是将所有的字符和符号进行分类:ASCII码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存。

计算机中的编码解码

  • 当计算机在工作时,内存中的数据一直是以Unicode的编码方式(定长,较浪费)表示的,当数据要保存到磁盘或者网络传输时,才会使用utf-8编码进行操作。
    这样,大家各取所需,皆大欢喜。
  • 由于可节省空间或流量,在存储和传输时,大部分时候遵循utf-8编码
    在这里插入图片描述
    在这里插入图片描述

python3中的编码解码

  • python中有两种字符串类型,str类型,存储类型为Unicode数据,bytes类型存储的是字节数据(UTF-8编码)。utf-8编码的中文占3个字节,unicode编码的中文占2个字节。(实例见参考2)

文件从磁盘到内存的编码

  • 当我们在编辑文本的时候,字符在内存对应的是unicode编码的,这是因为unicode覆盖范围最广,几乎所有字符都可以显示。
  • 当我们将文本等保存在磁盘时,数据通过某种编码方式编码成bytes字节串,如UTF-8,很好地节省了空间。当我们点击保存的时候,这些编辑软件已经"默默地"帮我们做了编码工作。
  • 当我们再打开这个文件时,软件又默默地给我们做了解码的工作,将数据再解码成unicode,然后就可以呈现明文给用户了。
  • 所以,unicode是离用户更近的数据,bytes是离计算机更近的数据

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值