string.decode()与unicode(字符串)

时间:2012-08-08 09:29:06

标签: python string unicode decode

myString = 'éíěřáé'

我需要将此字符串解码为unicode。 下面的用法和这两种方法之间有什么区别吗?

myString.decode(encoding='UTF-8', errors='ignore')

unicode(myString, encoding='UTF-8', errors='ignore')

3 个答案:

答案 0 :(得分:9)

unicode构造函数可以采用除字符串之外的其他类型:

>>> unicode(10)
u'10'

但是对于bytestring情况,这两种形式大多是等价的。某些编码选项对unicode构造函数无效,因为它们不会导致unicode输出,但对于.decode字节串方法有效,例如'hex'

>>> unicode('10', encoding='hex')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: decoder did not return an unicode object (type=str)

答案 1 :(得分:2)

它们基本相同,但在任何一种情况下都有一些小的性能捷径; str.decode知道它的参数是一个字符串,因此它可以快捷地对其参数进行类型检查,而unicode.__new__包含一些常见编码的快捷方式,包括UTF-8。

在一般情况下,两种方法都会调用PyCodec_Decode

答案 2 :(得分:0)

在Python 2.x中str.decode()可能会导致unicode对象或另一个strunicode()函数仅适用于导致unicode对象的编码。

例如:

>>> "x\x9cKLJ\x06\x00\x02M\x01'".decode('zip')
'abc'
>>> unicode("x\x9cKLJ\x06\x00\x02M\x01'", encoding='zip')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: decoder did not return an unicode object (type=str)
>>>

请注意,在内部它们的工作方式与调用unicode()的方式大致相同,表明它确实解码了对象,然后才反对结果的类型。