所以我在我的代码中导入了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,我知道它会保存如下字符:á,对吧?
答案 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))