我正在尝试打开一个具有Unicode字符(é)的URL。
当我直接在函数中编写它时,出现此错误:
from urllib.request import urlopen
uClient = urlopen("https://www.mypage.net/céline")
>>> UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 14: ordinal not in range(128)
当我这样写时,它可以工作:
from urllib.request import urlopen
uClient = urlopen("https://www.mypage.net/cr%C3%A9line")
但是它应该以自动方式工作,因此对输出进行编码是这样的:
不包括:https://www.mypage.net/c。line
utf-8:b'https://www.mypage.net/c \ xc3 \ xa9line
latin-1:b'https://www.mypage.net/c \ xe9line
ascii:b'https://www.mypage.net/cline
所以问题是如何将字符串“ https://www.mypage.net/céline”转换为urlopen
函数可以使用的内容?
我正在Win32上使用ATOM-Editor和Python 3.6.5(v3.6.5:f59c0932b4,Mar 28 2018,17:00:18)[MSC v.1900 64 bit(AMD64)]
谢谢!
答案 0 :(得分:0)
请求网址必须正确转义才能与urlopen
一起使用。
在您的示例中,这为您提供了正确编码的网址:
protohost = 'https://example.com/'
path = 'céline'
urllib.request.urlopen(f'{protohost}{urllib.request.quote(path)}')
请注意,编码部分如下所示:
>>> f'{protohost}{urllib.request.quote(path)}'
'https://example.comc%C3%A9line'