Python unicode转义字符串的测试

Python unicode转义字符串的测试,python,unicode,python-2.x,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转义字符串的scape 我试着这样做: for i in

我有一个像这样的数组

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转义字符串的scape

我试着这样做:

for i in data:
    print unicode(i['string'], 'unicode-escape')
但是,这总是为非转义字符串引发异常


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

很难从您的问题中确定,但我猜您希望将包含非ASCII字符的Unicode字符串转换为转义版本,在ASCII中无法表示的每个字符之前使用反斜杠。为此,您需要:

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

您拥有的是一个双编码字符串。为了创建Unicode,已经对它进行了一次解码,但您需要对它进行第二次解码

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

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

如果这在没有解码的情况下对您有效,那是因为您的控制台已经能够直接理解UTF-8字节字符串。如果要分配给新的Unicode字符串而不是打印它,则需要
解码

您确定这是您的代码吗?无论我传递哪个字符串,这都会给我“TypeError:不支持解码Unicode”。为什么要对此使用
Unicode转义
?您可以只调用
unicode()
,而无需在unicode和str对象上添加额外参数。如果你仍然需要检查某个东西是否是unicode字符串,你可以使用
isinstance(x,unicode)
来检查。我认为你应该使用类似
print I[“string”]的东西进行编码。编码(“拉丁-1”)
明白了-谢谢你:它们来自我正在尝试处理的一堆x.509证书。谢谢。这也帮助我找到了问题的根源。