编码/解码有什么区别?

问题:

我从来没有确定我明白了str / unicode解码和编码之间的区别。
我知道str().decode()是当你有一个字符串字符串,你知道有一定的字符编码,因为编码名称将返回一个Unicode字符串。
我知道unicode().encode()根据给定的编码名称将unicode字符转换成字符串。
但我不明白str().encode()unicode().decode()是什么。任何人都可以解释,也可能纠正上述错误吗?
编辑:
几个答案给出了一个字符串上的.encode的信息,但没有人似乎知道.decode对于unicode的作用。

回答:

unicode字符串的decode方法根本没有任何应用程序(除非您有某些原因在unicode字符串中有一些非文本数据 – 请参见下文)。我认为主要是出于历史原因。在Python 3中,这完全消失了。
 unicode().decode()将使用默认(ascii)编解码器执行s的隐式encoding。验证这样:

>>> s = u'ö'
>>> s.decode()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 0:
ordinal not in range(128)

>>> s.encode('ascii')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 0:
ordinal not in range(128)

错误消息是完全一样的。
对于str().encode(),它是相反的 – 它使用默认编码尝试隐式decoding s

>>> s = 'ö'
>>> s.decode('utf-8')
u'\xf6'
>>> s.encode()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0:
ordinal not in range(128)

这样使用str().encode()也是多余的。
 后一种方法的另一种应用是有用的:有encodings与字符集无关,因此可以以有意义的方式应用于8位字符串:

>>> s.encode('zip')
'x\x9c;\xbc\r\x00\x02>\x01z'

你是对的,但是,这两个应用程序的“编码”的模糊用法是… awkard。再次,在Python 3中使用单独的bytestring类型,这不再是一个问题。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: What is the difference between encode/decode?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 58 = 60