我有一个<type 'str'>
变量包含一些html。我的问题是,当打印到控制台时,特殊字符被编码为"xfc"
而不是"ü"
。
我已经试过了
html = html.encode('utf-8').decode('string_escape')
但没有成功。有人能给我指路吗?
谢谢!
更新:
这个问题还没有解决。以下是关于这个问题的更多信息……
我正在接收一个json字符串从一个外部源包含html除了一些其他的东西。我想访问html与xpath在一个"蛮力的方法",因为json结构经常变化。
所以我想用漂亮的汤。
为此,我将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 fxfcr Belgien)
<div class="sr_color">
<div style="float:left">
<a class="sr_color" href="">
Haus fxfcr 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>
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
从字节串转换为unicode -
encode
从unicode转换为字节串
字节串(Python 2中的str
, Python 3中的bytes
)是您用于输入(例如HTML)和输出(例如控制台)的字符串。Unicode (Python 2中的unicode
, Python 3中的str
)是你应该在程序中使用的。
您确定您的控制台支持unicode吗?Python可以很好地处理该字符,但是在打印它时,您的终端可能无法正确解释它。尝试将字符串写入文件并使用支持unicode的编辑器打开它(或者甚至是html文件并在浏览器中打开它)。
大多数终端仿真器支持多种编码,可以在它们的选项中设置(取决于所讨论的终端仿真器)。