如何构建Python中字符编码与解码的技能树?

2026-06-09 12:026阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计782个文字,预计阅读时间需要4分钟。

如何构建Python中字符编码与解码的技能树?

Python中的字符编码与解码是什么?在Python3中,字符默认编码是Unicode,而编码指的是将字符转换成字节流,解码则是相反的操作。在正式开始前,我们需要了解Python中的一些基本概念。

Python 字符编码与解码是什么

在 Python3 中字符默认编码是 Unicode 字符,而编码指的是将字符转换成字节流,解码是相反的操作。

如何构建Python中字符编码与解码的技能树?

在正式开始前,我们还需要梳理一些基本概念

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)))

也可以使用 Unicode 转码工具进行转换。

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

当出现上述类型的错误时,需要做的就是寻找到正确的原编码,然后进行处理。

本文共计782个文字,预计阅读时间需要4分钟。

如何构建Python中字符编码与解码的技能树?

Python中的字符编码与解码是什么?在Python3中,字符默认编码是Unicode,而编码指的是将字符转换成字节流,解码则是相反的操作。在正式开始前,我们需要了解Python中的一些基本概念。

Python 字符编码与解码是什么

在 Python3 中字符默认编码是 Unicode 字符,而编码指的是将字符转换成字节流,解码是相反的操作。

如何构建Python中字符编码与解码的技能树?

在正式开始前,我们还需要梳理一些基本概念

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)))

也可以使用 Unicode 转码工具进行转换。

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

当出现上述类型的错误时,需要做的就是寻找到正确的原编码,然后进行处理。