将HTML实体解码为Unicode

时间:2015-06-05 02:29:10

标签: python unicode character-encoding

好吧,从昨天起我就遇到了麻烦。我需要将一些文本保存到“.txt”文件中,问题是我正在尝试保存的文本中有html实体。

所以我在我的代码中导入了HTMLPaser:

import HTMLParser
h = HTMLParser.HTMLParser()
print h.unescape(text) // right? 

问题在于,当您尝试打印结果时,这是有效的,但我正在尝试将其返回到我的函数,该函数实际上将文本保存到文件中。所以,当我试图保存文件时,系统说:

exceptions.UnicodeEncodeError: 'ascii' codec can't encode character u'\xab' in position 0: ordinal not in range(128)

我一直在读这个但是我无法得出任何结论,我尝试过BeautifulSoup,我尝试过来自着名的pythonists的功能而没有工作。你能帮帮我吗?我需要将文本中的文本保存为unicode和unicode,我知道它会保存如下字符:á,对吧?

1 个答案:

答案 0 :(得分:1)

"将Unicode字符保存到文件"与"将HTML实体解码为Unicode" 的问题不同。您的代码(h.unescape(text))已经正确解码了html文本。

例外是由于print unicode_text例如:

print u"\N{EURO SIGN}"

应该产生类似的错误。

如果您通过重定向python脚本的输出来保存到文件中,例如:

$ python -m your_module >output.txt #XXX raises an error for non-ascii data

然后定义PYTHONIOENCODING=utf-8 envvar(使用utf-8编码保存):

$ PYTHONIOENCODING=utf-8 python -m your_module >output.txt

如果要直接在Python代码中保存到文件,请使用io module:

import io

with io.open(filename, 'w', encoding='utf-8') as file:
    file.write(h.unescape(text))