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

Это результат моего объекта. Я хотел бы получить доступ к Сити, но он закодирован. Как я могу прочитать все параметры и декодировать его?Преобразование строки unicode в 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) 

Я хочу, чтобы текстовый текст не был unicode. Спасибо!

+0

Я использую этот код https://github.com/sonicrules1234/pyipinfodb/blob/master/pyipinfodb.py – dani

+0

Нет такой вещи, как «plaintext». –

+2

Вам не нужно ничего делать. Он уже декодирован ... Попробуйте 'print data ['City']' – JBernardo

ответ

8

Прочитайте это: http://nedbatchelder.com/text/unipain.html

Затем просто распечатать его:

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

Если вы не печатать, Python печатает безопасное представление строки, указывающее, что это текст Unicode u'', и что он содержит символ не ASCII \xe8. print пытается отобразить символ, отличный от ASCII, путем кодирования строки Unicode в терминальной кодировке. Это может потерпеть неудачу, если строка содержит символы, которые не поддерживается терминал кодирования:

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

В приведенном выше примере, code page 437 поддерживает символы Unicode, U + 00E8, но не U + 0081.

0

Под открытым небом, я полагаю, вы имеете в виду ascii. Для этого вы можете использовать:

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

это лишит юникода характер и вернуть

Ciri 

Смотрите эту ссылку для получения дополнительной информации: http://docs.python.org/howto/unicode.html

9

То, что вы хотите, не ясно. Если под 'открытым текстом' вы имеете в виду удалить акцентуации, попробуйте следующее:

>>> s = u'Ciri\xe8' 
>>> from unicodedata import normalize 
>>> normalize('NFKD', s).encode('ASCII', 'ignore') 
'Cirie' 
Смежные вопросы