在 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'>

你可以选择不同的编码方式,如 asciiutf-8utf-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() 方法以及适当的错误处理策略是非常重要的。