Python2编码的问题
2018-01-20 本文已影响3人
依旧丶森
1.怀念python3
python3默认情况下,是通过unicode直接编码操作的,对于字符串、特殊字符、数字的支持都是一致的,字符串的编码和解码操作方式非常简洁。
#字符串构造了一个str对象,默认情况下就是通过unicode直接编码的字符
>>> s = "中文"
#如果将字符转换成字节,进行编码操作:s.encode(“utf-8”)
>>> x = s.encode("utf-8")
>>> x
b'\xe4\xb8\xad\xe6\x96\x87'
如果将字节转换成字符,进行编码操作:s.decode(“utf-8”)
>>> x
b'\xe4\xb8\xad\xe6\x96\x87'
>>> x.decode("utf-8")
'中文'
2. 吐槽python2
python2中,默认情况下是通过ascii编码进行操作的。
python2中的字符串有这样几种类型 [basestring | str | unicode]
其中 str 和 unicode 是继承自 basestring 的。
糟心的来了:python2中创建的字符串s=”abc”是str类型的,但在python2中是 str 是 bytes字节类型保存的.......有毒。
默认情况下:
>>> s = "中文"
>>> s
'\xd6\xd0\xce\xc4'
所以在包含中文字符串保存时,需要在字符串的前添加一个u字符
#表示是通过unicode编码的
>>> s = u'中文'
>>> s
u'\u4e2d\u6587'
如果是默认字节形式的中文字符串,要得到原本的中文形式
#需要decode()函数操作
>>> s = "中文"
>>> s
'\xd6\xd0\xce\xc4'
>>> x = s.decode("gbk")
>>> x
u'\u4e2d\u6587'
-
为什么python2中要将 unicode 编码的字符串转换成 ascii 编码进行后续的操作?
因为python内置的大量模块,并没有提供中文支持,调用内置模块的函数操作时,如果出现了非 ascii 编码,就会出现 ascii编码不支持的错误
UnicodeEncodeError: 'ascii' codec can't encode characters将unicode字符串,转换成bytes类型的str字符串 >>> s u'\u4e2d\u6587' >>> xs.encode("gbk") >>> x = s.encode("gbk") >>> x '\xd6\xd0\xce\xc4'
-
python2编码解码的问题——字符串
- 核心:字节和字符之间的转换
- 字节:专门给程序使用【python2内建的模块,如~写入文件】
- 字符:给用户看
- 默认创建的字符串str类型的,bytes字节类型
- 字节类型 str ->字符类型 unicode:s.decode(“utf-8”)
- 字符类型 unicode ->字节类型 str: s.encode(“utf-8”)
# 默认encode(“ascii”)
警告:python2中的str类型,默认就有一个encode()函数,但是这个函数只是在定义时为了对象操作的完整性出现的,使用会直接报错。
python2中的unicode类型,默认有一个decode()函数,同样不要去使用!