2012-04-20 28 views
8

Tengo un problema en Python con Unicode. Necesito trazar un gráfico con anotaciones Unicode en él. De acuerdo con el tutorial, debería simplemente crear mi cadena en Unicode. Lo hago así:Python: Crear una cadena Unicode

annotation = u"%s has %s rev"%(art.title, len(art.revisions)) 

Es art.title que tiene caracteres Unicode en ella. A veces ese código funciona, a veces me da el error abajo:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 19: ordinal not in range(128) 

¿Cómo puedo solucionarlo?

EDIT: tengo exactamente el error después de la línea "anotación":

File "script.py", line 195, in test_trie 
annotation = u"%s has %s rev"%(art.title, len(art.revisions)) 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 19: ordinal not in range(128) 
+1

¿De dónde viene 'art.title'? –

+0

¿Seguro que aparece el mensaje de error para la línea de código que nos diste? Sospecho que el error realmente ocurre cuando imprimes 'anotación'. En ese caso, ¿podría mostrar esa línea de código también? – jogojapan

+0

@jogojapan sí, ver la edición de la pregunta. – ashim

Respuesta

5

Creo que depende de si el título tiene un caracteres Unicode o no.

me gustaría probar añadiendo art.title.encode("utf-8") o art.title.decode("utf-8") y ver cómo funciona

4

Usted tiene dos opciones: o bien utilizar art.title.decode('utf_8'), o crear una nueva cadena Unicode con codificación UTF-8 por unicode(art.title, 'utf_8').

+0

Esas dos expresiones hacen lo mismo, y la 'decodificación' sería mi elección. Para una situación similar, consulte http://stackoverflow.com/questions/7585435/best-way-to-convert-string-to-bytes-in-python-3 –

Cuestiones relacionadas