Quiero que mi función tome un argumento que podría ser un objeto unicode o una cadena codificada en utf-8. Dentro de mi función, quiero convertir el argumento a Unicode. Tengo algo como esto:Decodificación si no es unicode
def myfunction(text):
if not isinstance(text, unicode):
text = unicode(text, 'utf-8')
...
¿Es posible evitar el uso de isinstance? Estaba buscando algo más amigable para escribir patos.
Durante mis experimentos con decodificación, he encontrado varios comportamientos raros de Python. Por ejemplo:
>>> u'hello'.decode('utf-8')
u'hello'
>>> u'cer\xf3n'.decode('utf-8')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/usr/lib/python2.6/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf3' in po
sition 3: ordinal not in range(128)
O
>>> u'hello'.decode('utf-8')
u'hello' 12:11
>>> unicode(u'hello', 'utf-8')
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: decoding Unicode is not supported
Por cierto. Estoy usando Python 2.6
es posible que desee echar un vistazo a esta pregunta: [UnicodeDecodeError Python - ¿Estoy entendiendo mal Unicode?] (http://stackoverflow.com/questions/368805/) – tzot