带有 urlopen(..net/cis..) 的 UnicodeEncodeError

UnicodeEncodeError with urlopen(..net/cé..)

我正在尝试打开具有 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

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 函数可以使用的字符串?

我正在使用 ATOM 编辑器和 Python 3.6.5(v3.6.5:f59c0932b4,2018 年 3 月 28 日,17:00:18)[MSC v.1900 64 位 (AMD64)] win32

谢谢!

请求 url 必须正确 url 转义才能与 urlopen 一起使用。

在您的示例中,这为您提供了正确编码的 url:

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'