1. 程式人生 > >python3 urlopen開啟包含中文的url

python3 urlopen開啟包含中文的url

當使用urllib.request.urlopen開啟包含中文的連結時報錯:

from urllib import request

url = 'https://baike.baidu.com/item/糖尿病'
response = request.urlopen(url)

提示錯誤:UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 10-12: ordinal not in range(128)

參考https://www.zhihu.com/question/22899135得知,
urllib.request.urlopen不支援中英文混合的字串。
應使用urllib.parse.quote進行轉換。

#coding=utf-8
from urllib import request
from urllib.parse import quote
import string

url = 'https://baike.baidu.com/item/糖尿病'
s = quote(url,safe=string.printable)
response = request.urlopen(s)

執行正確。

方法quote的引數safe表示可以忽略的字元。

string.printable表示ASCII碼第33~126號可列印字元,其中第48~57號為0~9十個阿拉伯數字;65~90號為26個大寫英文字母,97~122號為26個小寫英文字母,其餘的是一些標點符號、運算子號等。