测试unicode转义字符串

时间:2015-06-01 21:05:52

标签: python unicode python-2.x

我有一个看起来像这样的数组

data = [   
    {   'string': u'CN=Willian John sway\xc3\xa9rioGra\xc3\xa7a/emailAddress=will.graca@mail.acme.pt'},
    {   'string': u'CN=E0999999.www.acme.com'}
]

某些字符串包含unicode转义字符串,而某些字符串则不包含。我需要迭代数组并转换unicode转义字符串。

我试过这样做:

for i in data:
    print unicode(i['string'], 'unicode-escape')

但是,这总是会引发非转义字符串的异常。

作为迭代的一部分,是否有一种简单的方法来测试它?

2 个答案:

答案 0 :(得分:1)

你拥有的是双重编码的字符串。它已被解码一次以创建Unicode,但您需要再次解码它。

为此,我们利用Unicode从latin-1字符集中获取其前256个代码点的事实。这让我们将Unicode字符串转换回字节字符串,然后我们可以从UTF-8中解码。

print i['string'].encode('latin-1').decode('utf-8')

如果这对你没有decode有用,那是因为你的控制台已经直接理解了UTF-8字节字符串。如果要分配新的Unicode字符串而不是打印它,则需要decode

答案 1 :(得分:0)

很难确定你的问题,但我猜你想要将带有非ASCII字符的Unicode字符串转换为在每个无法用ASCII表示的字符之前使用反斜杠的转义版本。为此,你想要:

for item in data:
   print item["string"].encode("unicode-escape")