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

Devo decodificare questa stringa per unicode. C'è qualche differenza tra gli usi folowing e tra questi due metodi in generale?string.decode() vs. unicode (stringa)

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

e

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

risposta

9

Il unicode costruttore può prendere altri tipi tranne stringhe:

>>> unicode(10) 
u'10' 

Per il caso bytestring, tuttavia, le due forme sono per lo più equivalenti. Alcune opzioni di codifica non sono valide per il unicode costruttore come essi non comportino uscita unicode, ma sono valide per il metodo di stringhe di byte .decode, come '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

In Python 2.x str.decode() può comportare sia un oggetto Unicode o un altro str. La funzione unicode() funziona solo per le codifiche che generano un oggetto unicode.

Ad esempio:

>>> "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) 
>>> 

noti che internamente entrambi funzionano nello stesso modo come la chiamata a unicode() indica che esso ha veramente decodificare l'oggetto e solo allora sono opposti al tipo del risultato.

2

Sono essenzialmente uguali, ma con alcune scorciatoie di prestazioni minori in entrambi i casi; str.decode sa che il suo argomento è una stringa, quindi può controllare il tipo di collegamento del suo argomento, mentre unicode.__new__ ha scorciatoie per alcune codifiche comuni incluso UTF-8.

Entrambi i metodi chiamano in PyCodec_Decode nel caso generale.