在 Python 3 中,encode()
和 decode()
方法用于在字符串(str
)和字节字符串(bytes
)之间进行转换。这两种方法都是字符串和字节字符串对象的一部分,用于处理文本数据的编码和解码。
编码(Encode)
当你有一个字符串(str
)并希望将其转换为字节字符串(bytes
)时,你可以使用 encode()
方法。这通常在你准备将文本数据写入二进制文件或发送到网络时使用。
# 字符串
text = "Hello, world!"
# 将字符串编码为字节字符串(默认使用 UTF-8 编码)
encoded = text.encode('utf-8')
print(encoded) # 输出: b'Hello, world!'
print(type(encoded)) # 输出: <class 'bytes'>
你可以选择不同的编码方式,如 ascii
、utf-8
、utf-16
等。如果文本包含无法在所选编码中表示的字符,将引发一个 UnicodeEncodeError
。
解码(Decode)
相反,当你有一个字节字符串并希望将其转换为字符串时,你可以使用 decode()
方法。这在你从二进制文件读取文本数据或从网络接收文本数据时使用。
# 字节字符串
bytes_data = b"Hello, world!"
# 将字节字符串解码为字符串(默认使用 UTF-8 编码)
decoded = bytes_data.decode('utf-8')
print(decoded) # 输出: Hello, world!
print(type(decoded)) # 输出: <class 'str'>
同样,你可以选择不同的编码方式来解码字节字符串。如果字节字符串包含无法在所选编码中解码的字节序列,将引发一个 UnicodeDecodeError
。
错误处理
在编码和解码时,如果遇到错误,你可以指定错误处理策略。常见的策略有:
'strict'
:默认策略,遇到错误会抛出异常。'ignore'
:忽略错误的字符,不进行编码或解码。'replace'
:用一个特殊的替换字符来替换错误的字符。'xmlcharrefreplace'
:用 XML 特征引用来替换无法编码的字符。'backslashreplace'
:用 Python 字符串中的反斜杠转义序列来替换无法编码的字符。
例如,使用 ignore
策略:
# 包含无法在 ASCII 编码中表示的字符
text = "Hello, world! 👋"
# 忽略无法编码的字符
encoded = text.encode('ascii', 'ignore')
print(encoded) # 输出: b'Hello, world! '
# 解码时也忽略无法解码的字节
bytes_data = b"Hello, world! \xf0\x9f\x91\x8b"
decoded = bytes_data.decode('ascii', 'ignore')
print(decoded) # 输出: Hello, world!
在处理文本数据时,正确地使用 encode()
和 decode()
方法以及适当的错误处理策略是非常重要的。