我就是无法理解python2.7中的decode()
和encode()
函数是如何工作的。
我尝试了以下语句:
>>> s = u'abcd'
>>> s.encode('utf8')
'abcd'
>>> s.encode('utf16')
'\xff\xfea\x00b\x00c\x00d\x00'
>>> s.encode('utf32')
'\xff\xfe\x00\x00a\x00\x00\x00b\x00\x00\x00c\x00\x00\x00d\x00\x00\x00'
直到这里,我认为已经很清楚了;
encode()
函数将unicode编码转换为相应的utf-8/16/32字节字符串。但是当我编写以下代码:
>>> s.decode('utf8')
u'abcd'
>>> s.decode('utf16')
u'\u6261\u6463'
>>> s.decode('utf32')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/encodings/utf_32.py", line 11, in decode
return codecs.utf_32_decode(input, errors, True)
UnicodeDecodeError: 'utf32' codec can't decode bytes in position 0-3: codepoint not in range(0x110000)
为什么在unicode类型中使用decode()
的含义是什么?为什么第一个(使用utf8)可以工作,而后面的不行?这是因为Python内部使用utf-8存储Unicode字符串吗?
最后一件事:
>>> s2 = '≈'
>>> s2
'\xe2\x89\x88'
在幕后会发生什么?'≈'不是ASCII字符,那么Python是否会使用编码sys.getfilesystemencoding()
隐式地进行转换?
decode
方法,而bytes对象没有encode
方法,因此您不能意外地在错误的方向上进行编码/解码。 - BrenBarn