Python encode() 语法
encode() 是 Python 字符串的一个方法,它使用指定的编码方式来对字符串进行编码。
语法:
str.encode(encoding='UTF-8', errors='strict')说明:
encode() 方法接收以下 2 个参数。
encoding(可选):编码方式,常用取值为 'UTF-8'、'ASCII' 等,默认值为 'UTF-8'。errors(可选):编码失败时的错误响应,默认值为 'strict'。
对于 errors 参数来说,它共有 6 种错误响应,如下表所示。
| 取值 | 说明 |
|---|---|
| '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 的码位,无法编码的字符会被替换为 “?”。
