尝试解析Te Reo Maori中的单词时出现此错误
Pāngarau - 我假设它是macron
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
追踪(最近一次呼叫最后一次):
File "/Users/Teacher/Documents/Python/Standards/rip_html2.py", line 10, in <module>
print text[0].text
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0101' in position 1: ordinal not in range(128)
[Finished in 0.5s with exit code 1]
答案 0 :(得分:2)
在Python2中,当您检查Element的text
属性时,lxml有时会returns str
s, and sometimes unicode
。
当文本完全由ascii字符组成时,它返回str
,否则返回unicode
。
在发生错误时,text[0].text
是包含字符unicode
的{{1}}。
要修复错误,请在打印前将u'\u0101'
显式编码为字节字符串:
unicode
请注意print(text[0].text.encode('utf-8'))
只是众多encodings you could use中的一个。
通常,如果要打印到终端,Python将检测终端使用的编码,并使用该编码对utf-8
进行编码,从而将字节打印到终端。
由于您收到错误
unicode
看起来您可能正在打印到文件,或者Python无法确定输出设备的编码。由于输出设备只接受字节(从不是unicode),因此必须对所有unicode进行编码。在这种情况下,Python2会自动尝试使用UnicodeEncodeError: 'ascii' codec can't encode character u'\u0101' in position 1: ordinal not in range(128)
编解码器对unicode
进行编码。因此错误。
答案 1 :(得分:-1)
可能是因为默认情况下Python 2仅支持ASCII字符串,除非明确提到。要使用Unicode而不是ASCII,可以在脚本的第一行添加以下行:
# -*- coding: utf-8 -*-