6
{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'}

これは私のオブジェクトの出力です。Cityにアクセスしたいのですが、エンコードされています。すべてのパラメータを読み取ってデコードするにはどうすればよいですか

>>> 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文字列ではなく平文が必要です。ありがとうございました!

4

3 に答える 3

9

あなたが望むものは明確ではありません。'plaintext'でアクセントを削除することを意味する場合は、次のことを試してください。

>>> s = u'Ciri\xe8'
>>> from unicodedata import normalize
>>> normalize('NFKD', s).encode('ASCII', 'ignore')
'Cirie'
于 2012-04-22T02:22:55.020 に答える
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以外の文字が含まれていることを示します\xe8printターミナルエンコーディングでUnicode文字列をエンコードすることにより、非ASCII文字を表示しようとします。文字列に端末エンコーディングでサポートされていない文字が含まれていると、失敗する可能性があります。

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

上記の例では、コードページ437はUnicode文字U + 00E8をサポートしていますが、U+0081はサポートしていません。

于 2012-04-22T03:15:41.793 に答える
0

平文では、ASCIIを意味していると思います。これには、次のものを使用できます。

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

これにより、Unicode文字が削除され、

Ciri

詳細については、次のリンクを参照してください:http ://docs.python.org/howto/unicode.html

于 2012-04-22T02:10:16.417 に答える