在使用lxm抓取网页时,用长音符分析字母,例如ā

2024-05-23 19:53:15 发布

您现在位置:Python中文网/ 问答频道 /正文

在试图解析tereo毛利语中的单词时出现了这个错误

pāngarau-我假设是马克龙

UnicodeEncodeError:“ascii”编解码器无法编码字符u'\u0101'

有什么办法解决这个问题吗?在

from lxml import html
import requests

page = requests.get('http://www.nzqa.govt.nz/qualifications-standards/qualifications/ncea/subjects/')
tree = html.fromstring(page.text)

text = tree.xpath('//*[@id="mainPage"]/table[1]/tbody/tr[1]/td[3]/a')

print text[0].text

回溯(最近一次呼叫):

^{pr2}$

Tags: textimporttree编码html错误编解码器ascii
2条回答

在Python2中,lxml有时在检查元素的text属性时returns ^{}s, and sometimes ^{}。在

当文本完全由ascii字符组成时,它返回str,否则返回unicode。在

在错误发生的地方,text[0].text是一个unicode,包含字符u'\u0101'。在

要修复此错误,请在打印之前将unicode显式编码为字节字符串:

print(text[0].text.encode('utf-8'))

注意,utf-8只是众多encodings you could use中的一个。在


通常,如果要打印到终端,Python将检测终端使用的编码,并使用该编码对unicode进行编码,从而将字节打印到终端。在

既然你得到了错误

^{pr2}$

您可能正在打印到文件,或者Python无法确定输出设备的编码。由于输出设备只接受字节(从不接受unicode),所以必须对所有unicode进行编码。在这种情况下,Python2会自动尝试使用ascii编解码器对unicode进行编码。因此出现了错误。在

另请参见:PrintFails wiki page

这可能是因为除非明确提到,否则Python2默认只支持ASCII字符串。要使用Unicode而不是ASCII,可以在脚本的第一行添加以下行:

# -*- coding: utf-8 -*-

相关问题 更多 >