myString = 'éíěřáé'
我需要将此字符串解码为unicode。 下面的用法和这两种方法之间有什么区别吗?
myString.decode(encoding='UTF-8', errors='ignore')
和
unicode(myString, encoding='UTF-8', errors='ignore')
答案 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对象或另一个str
。 unicode()
函数仅适用于导致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()
的方式大致相同,表明它确实解码了对象,然后才反对结果的类型。