Python - Unicode&双反斜杠

时间:2017-01-04 14:56:59

标签: python unicode beautifulsoup backslash unicode-escapes

我用BeautifulSoup废弃了一个网页。 我得到了很好的输出,除了列表的部分在得到文本后看起来像这样:

list = [u'that\\u2019s', u'it\\u2019ll', u'It\\u2019s', u'don\\u2019t', u'That\\u2019s', u'we\\u2019re', u'\\u2013']

我现在的问题是如何摆脱或替换这些双反斜杠的特殊字符。

如果我打印第一个示例列表的第一个元素,则输出看起来像

print list[0]
that\u2019s

我已经阅读了很多关于这个主题的其他问题/线索,但最后我更加困惑,因为我是一个考虑unicode /编码/解码的初学者。

我希望有人可以帮我解决这个问题。

谢谢! MG

2 个答案:

答案 0 :(得分:3)

这里的问题是网站最终对这些unicode参数进行了双重编码,只需执行以下操作:

ls = [u'that\\u2019s', u'it\\u2019ll', u'It\\u2019s', u'don\\u2019t', u'That\\u2019s', u'we\\u2019re', u'\\u2013']

ls = map(lambda x: x.decode('unicode-escape'), ls)

现在你有一个包含正确unicode编码字符串的列表:

for a in ls:
   print a

答案 1 :(得分:3)

由于你在那里使用Python 2,只需重新应用“decode”方法 - 使用特殊的编解码器“unicode_escape”。它“看到”“物理”反冲并将这些序列解码为正确的unicode字符:

data =  [u'that\\u2019s', u'it\\u2019ll', u'It\\u2019s', u'don\\u2019t', u'That\\u2019s', u'we\\u2019re', u'\\u2013']

result = [part.decode('unicode_escape') for part in data]

对于使用Python3到达此处的任何人:在该版本中无法将“decode”方法应用于beautifulsoup提供的str对象 - 必须首先将这些对象重新编码为字节串对象,然后解码使用uncode_escape编解码器。出于这些目的,使用latin1编解码器作为transparent编码是有用的:str对象中的所有字节都保留在新的字节对象中:

result = [part.encode('latin1').decode('unicode_escape') for part in data]