菜鸟笔记
提升您的技术认知

对Python中字符串编码的理解

字符串,作为Python中基本数据类型中的一种,也是使用最频繁的数据类型。这里对字符串的编码格式做一个总结。

在Python中字符串有两种形式:一种是bytes类型,一种是str类型。

str ->> bytes:encode编码
bytes ->> str:decode解码
  • 文本总是Unicode,由str类型进行表示
  • 二进制数据使用bytes进行表示
  • 网络中数据的传输是以二进制(字节码)的方式来进行的
  • 所以为了达到网络传输的目的,数据需要有如下一个转换:
  • 在进入网络中前,转换成字符串
  • 在网络中使用二进制
  • 从网络传递到本地,转换成字符串
可以使用下图这种理解方式:

1.1参数

  • encoding – 可选参数,要使用的编码,默认编码为 ‘utf-8’。
  • errors – 可选参数,设置不同错误的处理方案。默认为 ‘strict’,意为编码错误引起一个UnicodeError。 其他可能得值有 ‘ignore’, ‘replace’, ‘xmlcharrefreplace’, ‘backslashreplace’ 以及通过 codecs.register_error() 注册的任何值。

1.2示例:

bingdeMacBook-Pro:~ bingyao$ python3
Python 3.6.2 (v3.6.2:5fd33b5926, Jul 16 2017, 20:11:06)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> text="文本"
>>> text
'文本'
>>> # 编码
... en_text = text.encode()
>>> en_text
b'\xe6\x96\x87\xe6\x9c\xac'
>>> # 解码
... de_text = en_text.decode()
>>> de_text
'文本'
>>>
注意点:

如果需要选定编码方式(type参数),编码方式解码方式必须一样,否则就会出现乱码

示例:

bingdeMacBook-Pro:~ bingyao$ python3
Python 3.6.2 (v3.6.2:5fd33b5926, Jul 16 2017, 20:11:06)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> text = "文本"
>>> text
'文本'
>>>
>>>
>>> # 编码使用utf-8,默认就是utf-8
... en_text = text.encode("utf-8")
>>> en_text
b'\xe6\x96\x87\xe6\x9c\xac'
>>>
>>>
>>> # 解码使用gbk
... de_text = en_text.decode("gbk")
>>> de_text
'鏂囨湰'

通过上面的示例可以看到,如果使用的解码方式和编码方式不配会出现乱码的现象