3

「UNICODE」でエンコードされた文字列をデコードする必要があります。

>>> id = u'abcdß'
>>> encoded_id = id.encode('utf-8')
>>> encoded_id
'abcd\xc3\x9f'

私が抱えている問題は次のとおりです: Pylons ルーティングを使用して、encoded_id 変数をu'abcd\xc3\x9f'単なる通常の文字列ではなくUnicode 文字列として取得し'abcd\xc3\x9f'ます。

Pythonを使用して、unicode文字列であるencoded_id変数をデコードするにはどうすればよいですか?

>>> encoded_id = u'abcd\xc3\x9f'
>>> encoded_id.decode('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/test/vng/lib64/python2.6/encodings/utf_8.py", line 16, in         decode
return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 4-5: ordinal not in range(128)
4

1 に答える 1

5

UTF-8 でエンコードされたデータがあります (UNICODE でエンコードされたデータなどはありません)。

Unicode 値を Latin-1 にエンコードしてから、UTF8 からデコードします。

encoded_id.encode('latin1').decode('utf8')

Latin 1 は、最初の 255 個の Unicode ポイントを 1 対 1 でバイトにマップします。

デモ:

>>> encoded_id = u'abcd\xc3\x9f'
>>> encoded_id.encode('latin1').decode('utf8')
u'abcd\xdf'
>>> print encoded_id.encode('latin1').decode('utf8')
abcdß
于 2013-09-27T17:42:40.360 に答える