在Python中解码ENCODED Unicode字符串

all*_*sef 3 python string unicode decode

我需要解码“ UNICODE”编码的字符串:

>>> id = u'abcdß'
>>> encoded_id = id.encode('utf-8')
>>> encoded_id
'abcd\xc3\x9f'
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是:使用Pylons路由,我将encode_id变量作为unicode字符串u'abcd\xc3\x9f'而不是普通字符串获取'abcd\xc3\x9f'

使用python,如何解码我的unicode字符串的encode_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)
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

您具有UTF-8编码的数据(没有诸如UNICODE编码的数据)。

将unicode值编码为Latin-1,然后从UTF8解码:

encoded_id.encode('latin1').decode('utf8')
Run Code Online (Sandbox Code Playgroud)

Latin 1将一对一的前255个unicode点映射到字节。

演示:

>>> encoded_id = u'abcd\xc3\x9f'
>>> encoded_id.encode('latin1').decode('utf8')
u'abcd\xdf'
>>> print encoded_id.encode('latin1').decode('utf8')
abcdß
Run Code Online (Sandbox Code Playgroud)