2012-08-08 65 views
11
myString = 'éíěřáé' 

我需要將此字符串解碼爲unicode。 以下兩種方法之間是否有區別?string.decode()與unicode(字符串)

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

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

回答

9

unicode構造函數可以從字符串分開採取其他類型:

>>> unicode(10) 
u'10' 

對於字節串的情況下,然而,這兩種形式的大多是等價的。一些編碼選項是無效的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) 
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()是表明它沒有真正解碼的對象,然後才反對的結果的類型。

2

他們本質上是一樣的,但在這兩種情況下都有一些小的表現捷徑; str.decode知道它的參數是一個字符串,因此它可以快速檢查其參數的類型,而unicode.__new__具有包括UTF-8的一些常用編碼的快捷方式。

在一般情況下,兩種方法都調用PyCodec_Decode