如何暴力解析JSON字符串中的HTML或在Python中修复"<type 'str'>"中的"\xfc
我有一个 <type 'str'>
类型的变量,里面包含了一些 HTML 内容。我的问题是,当我在控制台打印出来时,特殊字符被编码成了 "\xfc"
,而不是我想要的 "ü"
。
我已经尝试过
html = html.encode('utf-8').decode('string_escape')
但没有成功。有没有人能给我一些正确的方向?
谢谢!
更新:
问题还没有解决。这是一些关于问题的更多信息……
我从外部来源收到一个 JSON 字符串,里面除了其他内容还有 HTML。我想用 xpath 来访问这些 HTML,因为 JSON 的结构经常变化,所以我打算用一种“蛮力”的方法。
所以我决定使用 Beautiful Soup。
为此,我把 JSON 字符串传给 json.loads(),这样就把它变成了一个对象。然后我把这个 JSON 对象转换成普通字符串,再传给 Beautiful Soup。
这个方法效果不错,但对于像 ßäüöÄÜÖ 这样的特殊字符就不行了。
有什么好的方法可以解决这个问题吗?
这是一些伪代码
data = json.loads(jsonstring)
html = str(data)
soup = BeautifulSoup(data)
html = soup.prettify()
html = "<html><head><meta charset='UTF-8'></head>" + html + "</body></html>"
print type(html)
print html
这是 Beautiful Soup 返回的一个典型结果(看看 Haus f\xfcr Belgien)
<div class="sr_color">
<div style="float:left">
<a class="sr_color" href="">
Haus f\xfcr Belgien
</a>
:
<span>
<span class="sr_num_color">
5,0
</span>
<span style="display:-moz-inline-box;display:inline-block;float:none;vertical-align:-1px" class="star">
<span style="width:65px">
</span>
</span>
</span>
</div>
</div>
2 个回答
你确定你的控制台支持unicode吗?Python可能处理这个字符没问题,但当它要显示出来的时候,你的终端可能就无法正确理解了。你可以试着把这个字符串写入一个文件,然后用支持unicode的编辑器打开它(或者写成一个html文件,用浏览器打开)。
大多数终端模拟器支持多种编码方式,你可以在它们的设置选项中进行调整(具体取决于你使用的终端模拟器)。
\xfc
是 ü
在 latin1
编码中的表示方式。
首先,把你的 HTML 解码成 Unicode,然后用适合你控制台的编码来打印出来:
u = html.decode('latin1') # u is an unicode string
print u.encode('utf-8') # u.encode('utf-8') is a bytestring, encoded in utf-8
请注意:
decode
是把字节串转换成 Unicodeencode
是把 Unicode 转换成字节串
字节串(在 Python 2 中是 str
,在 Python 3 中是 bytes
)是你用来输入(比如你的 HTML)和输出(比如你的控制台)的东西。Unicode(在 Python 2 中是 unicode
,在 Python 3 中是 str
)是你在程序中应该使用的格式。