Python 字符串 encode() 方法

Python encode() 语法

encode() 是 Python 字符串的一个方法,它使用指定的编码方式来对字符串进行编码。

语法:

str.encode(encoding='UTF-8', errors='strict')

说明:

encode() 方法接收以下 2 个参数。

  • encoding(可选):编码方式,常用取值为 'UTF-8'、'ASCII' 等,默认值为 'UTF-8'。
  • errors(可选):编码失败时的错误响应,默认值为 'strict'。

对于 errors 参数来说,它共有 6 种错误响应,如下表所示。

errors 参数的取值
取值 说明
'strict'(默认值) 引发 UnicodeEncodeError 异常
'ignore' 忽视不可编码的 Unicode
'replace' 将不可编码的 Unicode 替换为 “?”
'xmlcharrefreplace' 插入 XML 字符引用,而不是不可编码的 Unicode
'backslashreplace' 插入 \uNNN 转义序列,而不是不可编码的 Unicode
'namereplace' 插入 \N{...} 转义序列,而不是不可编码的 Unicode

需要注意的是,str 对象与 bytes 对象是不同的数据类型。我们可以使用 encode() 函数将 str 对象转换为 bytes 对象,也可以使用 bytes.decode() 方法将 bytes 对象转换回 str 对象。

字符串编码

从 Python 3.0 开始,字符串以 Unicode 的形式进行存储。也就是字符串的每个字符都由一个码位表示。因此,字符串本质上是一个 Unicode 码位序列。

为了更加有效地存储这些字符串,代码点序列被转换为一组字节,这个过程就被称为 “编码”。常见的编码方式有 UTF-8、ASCII 等。

Python encode() 摘要

使用频率
修改原字符串
官方文档 查看
相关方法 bytes.decode()

Python encode() 示例

接下来,我们通过几个简单的例子来讲解 Python encode() 方法是如何使用的。

示例 1:encode() 基本用法

s1 = 'lvynet'
s2 = '绿叶网'

print(s1.encode())
print(s2.encode())

运行结果如下。

b'lvynet'
b'\xe7\xbb\xbf\xe5\x8f\xb6\xe7\xbd\x91'

分析:

s1.encode() 等价于 s1.encode(encoding='UTF-8', errors='strict')。

示例 2:encode() 带 1 个参数

s1 = 'lvynet'
s2 = '绿叶网'

print(s1.encode(encoding='ASCII'))
print(s2.encode(encoding='ASCII'))

运行结果如下。

b'lvynet'
( 报错 ) UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

示例 3:encode() 带 2 个参数

s1 = 'lvynet'
s2 = '绿叶网'

print(s1.encode(encoding='ASCII', errors='ignore'))
print(s2.encode(encoding='ASCII', errors='ignore'))

运行结果如下。

b'lvynet'
b''

示例 4:encode() 使用不同编码格式

s = 'Hello 绿叶'
utf16_bytes = s.encode('utf-16')
latin1_bytes = s.encode('latin-1', errors='replace')    # '绿叶' 无法编码为 Latin-1
print(utf16_bytes)
print(latin1_bytes)

运行结果如下。

b'\xff\xfeH\x00e\x00l\x00l\x00o\x00 \x00?\x7f\xf6S'
b'Hello ??'

分析:

UTF-16 每个字符占 2 或 4 字节,Latin-1 仅支持 0-255 的码位,无法编码的字符会被替换为 “?”。

上一篇: format_map()

下一篇: Python 内置函数

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号