我有一个包含一些html的<type 'str'>
变量。我的问题是,当打印到控制台时,特殊字符的编码类似于"\xfc"
而不是"ü"
。
我已经尝试过了
html = html.encode('utf-8').decode('string_escape')
但没有成功。谁能引导我走向正确的方向?
谢谢!
更新
问题尚未解决。以下是有关此问题的更多信息......
我从外部源接收一个json字符串,其中包含html以及其他一些东西。由于json结构经常变化,我想用“暴力方法”访问带有xpath的html。
所以我想用漂亮的汤。
为此,我将json字符串传递给json.loads(),将其转换为对象。然后我将json对象强制转换为普通字符串并将其传递给美丽的汤。
这种方法非常有效,除了特殊字符,如ßäüöÄÜ。
解决这个问题的最佳方法是什么?
这是一些伪代码
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
这是美丽汤的典型结果(参见 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>
答案 0 :(得分:2)
\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
从bytestrings转到unicode encode
从unicode转到bytestrings Bytestrings(Python 2中的str
,Python 3中的bytes
)是用于输入(例如HTML)和输出(例如控制台)的内容。 Unicode(Python 2中的unicode
,Python 3中的str
)是您应该在程序中使用的。
答案 1 :(得分:0)
您确定您的控制台支持unicode吗? Python可以很好地处理字符,但是当它被打印时,你的终端可能无法正确解释它。尝试将字符串写入文件并使用支持unicode的某个编辑器(甚至是html文件并在浏览器中打开它)打开它。
大多数终端仿真器支持多种编码,可以在其选项中进行设置(取决于所讨论的终端仿真器)。