[英]Encoding characters to utf-8 hex in Python 3
我有一個網絡爬蟲,收到很多這些錯誤:
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函數自動執行此操作?
您正在對它們進行URL編碼 。 您可以使用urllib.parse.quote()
函數urllib.parse.quote()
地做到這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
替換空格(並處理URL的query
部分)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.