2012-04-22 16 views
5
{u'Status': u'OK', u'City': u'Ciri\xe8', u'TimezoneName': '', u'ZipPostalCode': '', u'CountryCode': u'IT', u'Dstoffset': u'0', u'Ip': u'x.x.x.x', u'Longitude': u'7.6', u'CountryName': u'Italy', u'RegionCode': u'12', u'Latitude': u'45.2333', u'Isdst': '', u'Gmtoffset': u'0', u'RegionName': u'Piemonte'} 

Esta es la salida de mi objeto. Me gustaría acceder a City pero está codificado. ¿Cómo puedo leer todos los parámetros y decodificarlo?Transformar cadena unicode en python

>>> data['City'] 
u'Ciri\xe8' 

>>>data['City'].decode('utf-8') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/utf_8.py", line 16, in decode 
    return codecs.utf_8_decode(input, errors, True) 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe8' in position 4: ordinal not in range(128) 

Quiero cadena de texto no unicode. ¡Gracias!

+0

Estoy usando este código https://github.com/sonicrules1234/pyipinfodb/blob/master/pyipinfodb.py – dani

+0

No existe el "texto claro". –

+2

No tiene que hacer nada. Ya está decodificado ... Prueba 'imprimir datos ['Ciudad']' – JBernardo

Respuesta

8

leyeron: http://nedbatchelder.com/text/unipain.html

A continuación, sólo imprimirlo:

>>> data = {u'City':u'Ciri\xe8'} 
>>> data['City'] 
u'Ciri\xe8' 
>>> print data['City'] 
Ciriè 

Si no lo imprime, impresiones de Python una representación segura de la cadena, que indica que es texto Unicode u'', y que contiene un carácter no ASCII \xe8. print intenta mostrar el carácter no ASCII codificando la cadena Unicode en la codificación del terminal. Se puede fallar si la cadena contiene caracteres que no son compatibles con el terminal de codificación:

>>> print u'\xe8' 
è 
>>> print u'\x81' 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "d:\dev\Python27\lib\encodings\cp437.py", line 12, in encode 
    return codecs.charmap_encode(input,errors,encoding_map) 
UnicodeEncodeError: 'charmap' codec can't encode character u'\x81' in position 0: character maps to <undefined> 

En el ejemplo anterior, code page 437 soporta caracteres Unicode U + 00E8, pero no U + 0081.

0

Por texto simple, supongo que te refieres a ascii. Para ello se puede utilizar:

data['City'].encode('ascii','ignore') 

esto va a despojar a los caracteres Unicode y volver

Ciri 

ver este enlace para más información: http://docs.python.org/howto/unicode.html

9

Lo que queremos no está claro. Si por 'texto plano' que quiere decir eliminar la acentuación, intente esto:

>>> s = u'Ciri\xe8' 
>>> from unicodedata import normalize 
>>> normalize('NFKD', s).encode('ASCII', 'ignore') 
'Cirie' 
Cuestiones relacionadas