带有UnicodeEncodeError的国家字符的URL

时间:2015-05-15 13:40:51

标签: python character-encoding

我正在尝试提取字典条目:

url = 'http://www.lingvo.ua/uk/Interpret/uk-ru/вікно'
# parsed_url = urlparse(url)
# parameters = parse_qs(parsed_url.query)
# url = parsed_url._replace(query=urlencode(parameters, doseq=True)).geturl()
page = urllib.request.urlopen(url)
pageWritten = page.read()
pageReady = pageWritten.decode('utf-8')
xmldata = lxml.html.document_fromstring(pageReady)
text = xmldata.xpath(//div[@class="js-article-html g-card"])

打开或关闭注释行,它会一直出错:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 24-28: ordinal not in range(128)

1 个答案:

答案 0 :(得分:1)

您的问题是您的网址路径中包含非ASCII字符,必须使用Python 3中的urllib.parse.quote(string)或Python 2中的urllib.quote(string)正确编码。

# Python 3
import urllib.parse
url = 'http://www.lingvo.ua' + urllib.parse.quote('/uk/Interpret/uk-ru/вікно')

# Python 2
import urllib
url = 'http://www.lingvo.ua' + urllib.quote(u'/uk/Interpret/uk-ru/вікно'.encode('UTF-8'))

注意:根据What is the proper way to URL encode Unicode characters?,网址应编码为UTF-8。但是,这并不排除对生成的非ASCII,UTF-8字符进行编码百分比。