多平台统一管理软件接口,如何实现多平台统一管理软件接口
343
2022-09-03
【Python技能树共建】字符编码与解码
Python 字符编码与解码是什么
在 Python3 中字符默认编码是 Unicode 字符,而编码指的是将字符转换成字节流,解码是相反的操作。
在正式开始前,我们还需要梳理一些基本概念
Python 中的字符串
计算机中 8 比特(bit)等于一个字节(byte),8 比特就是 8 位,即一个字节能表示的最大整数是 255(1111 1111)。
如果希望扩大整数范围,需要用到更多的字节,例如 2 个字节就可以表示 65535,4 个字节就能表示 4294967295。
基于上述原理出现了各种编码格式,例如 ASCII 可以表示 256 个字符,但仅支持英文字母,数字和少部分符号,中文的范围要大很多,所以出现了 GB2312 编码(后来升级到了 GBK 编码),可以容纳 6763 个汉字,但放眼世界还不够,还需要更多的字符。
此时 Unicode 字符集就出现了,它将所有的语言都容纳在一起,后续为了在存储和传输数据时节省空间,出现了 UTF8 编码。
怎么用
Python 编码基本使用
通过 ord() 函数获取字符的整数表示,通过 chr() 将整数转换为字符,例如下述代码
print(ord('爬')) # 29228 print(chr(29228))
既然知道数字可以转换为数字,那十进制和十六进制的数字都可以。
例如 29228 = 722c,所以 \u722c
print(chr(int('722c', 16)))
Python 编码和解码函数
encode() 和 decode() 分别对应编码和解码函数,en 是编码,de 是解码。
my_b = '技能树'.encode('utf-8') print('编码后',my_b) # 编码后 b'\xe6\x8a\x80\xe8\x83\xbd\xe6\xa0\x91'
解码操作如下所示:
my_b = '技能树'.encode('utf-8') print('编码后', my_b) # 编码后 b'\xe6\x8a\x80\xe8\x83\xbd\xe6\xa0\x91' my_str = my_b.decode('utf-8') print("解码后", my_str)
需要注意编码后输出的内容与字符串类似,就是前面有一个前缀 b。
乱码
如果编码和解码方法不一致,就会出现乱码问题,例如下述代码
my_b = '技能树'.encode('gbk') print('编码后', my_b) # 编码后 b'\xbc\xbc\xc4\xdc\xca\xf7' my_str = my_b.decode('utf-8') print("解码后", my_str)
出错信息如下所示:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbc in position 0: invalid start byte
当出现上述类型的错误时,需要做的就是寻找到正确的原编码,然后进行处理。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~