我有一个网络抓取工具,可以解决很多这些错误:
UnicodeEncodeError: 'ascii' codec can't encode character '\xe1' in position 27: ordinal not in range(128)
为了缓解这些错误,我实现了一个对它们进行编码的函数:
def properEncode(url):
url = url.replace("ø", "%C3%B8")
url = url.replace("å", "%C3%A5")
url = url.replace("æ", "%C3%A6")
url = url.replace("é", "%c3%a9")
url = url.replace("Ø", "%C3%98")
url = url.replace("Å", "%C3%A5")
url = url.replace("Æ", "%C3%85")
url = url.replace("í", "%C3%AD")
return url
这些基于此表:http://www.utf8-chartable.de/
我做的转换似乎是将它们转换为utf-8十六进制?有自己的python函数吗?
答案 0 :(得分:1)
您是网址编码。您可以使用urllib.parse.quote()
函数轻松完成:
>>> from urllib.parse import quote
>>> quote("ø")
'%C3%B8'
或者放入一个只修复给定URL的URL路径的函数(例如,这个编码不适用于主机部分):
from urllib.parse import quote, urlparse
def properEncode(url):
parts = urlparse(url)
path = quote(parts.path)
return parts._replace(path=path).geturl()
这将编码限制为URL的路径部分。如果您需要对查询字符串进行编码,请使用quote_plus
函数作为查询参数,用加号替换空格而不是%20
(并处理query
部分URL)。