2012-04-22 12 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'} 

Questo è l'output del mio oggetto. Vorrei accedere alla città ma è codificato. Come posso leggere tutti i parametri e decodificarloTrasforma stringa unicode in 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) 

Voglio testo non stringa unicode. Grazie!

+0

Sto usando questo codice https://github.com/sonicrules1234/pyipinfodb/blob/master/pyipinfodb.py – dani

+0

Non esiste un "testo in chiaro". –

+2

Non devi fare nulla. È già decodificato ... Prova 'stampa dati ['Città']' – JBernardo

risposta

8

Leggi questo: http://nedbatchelder.com/text/unipain.html

Poi basta stampare:

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

Se non stamparlo, stampe Python una rappresentazione sicura della stringa, indicando che è il testo Unicode u'' e che contiene un carattere non ASCII \xe8. print tenta di visualizzare il carattere non ASCII codificando la stringa Unicode nella codifica del terminale. Esso non può riuscire se la stringa contiene caratteri non supportati dalla codifica terminale:

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

Nell'esempio precedente, code page 437 supporta carattere Unicode U + 00E8, ma non U + 0081.

0

Da testo in chiaro, suppongo che tu voglia dire ascii. Per questo si può utilizzare:

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

questo metterà a nudo il carattere unicode e tornare

Ciri 

Vedere questo link per maggiori informazioni: http://docs.python.org/howto/unicode.html

9

Quello che vuoi non è chiaro. Se da 'in chiaro' si intende rimuovere accentuazione, provate questo:

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