簡體   English   中英

在Python 3中將字符編碼為utf-8十六進制

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM