我在尝试使用 lxml 获取 HTML 文档中的所有文本节点时遇到了这个问题,但我得到了 UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 8995: ordinal not in range(128)
。但是,当我尝试找出此页面的编码类型 ( encoding = chardet.detect(response)['encoding']
) 时,它说它是utf-8
. 一个页面有 utf-8 和 ascii 似乎很奇怪。其实这个:
fromstring(response).text_content().encode('ascii', 'replace')
解决问题。
这是我的代码:
from lxml.html import fromstring
import urllib2
import chardet
request = urllib2.Request(my_url)
request.add_header('User-Agent',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)')
request.add_header("Accept-Language", "en-us")
response = urllib2.urlopen(request).read()
print encoding
print fromstring(response).text_content()
输出:
utf-8
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 8995: ordinal not in range(128)
我能做些什么来解决这个问题?请记住,我想对其他几个页面执行此操作,因此我不想单独编码。
更新:
也许这里还有其他事情发生。当我在终端上运行这个脚本时,我得到了正确的输出,但是当在 SublimeText 中运行它时,我得到 UnicodeEncodeError...¿?
更新2:
当我使用此输出创建文件时也会发生这种情况。.encode('ascii', 'replace')
正在工作,但我想要一个更通用的解决方案。
问候