在Python 3中将字符编码为utf-8十六进制

时间:2016-12-25 22:39:48

标签: python encoding utf-8

我有一个网络抓取工具,可以解决很多这些错误:

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函数吗?

1 个答案:

答案 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)。