带有urlopen(.. net /cé..)

时间:2018-08-26 15:27:02

标签: python unicode python-3.6 urlopen

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

谢谢!

1 个答案:

答案 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'