带有 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")
但它应该以自动方式工作,所以编码后的输出是这样的:
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'
我正在尝试打开具有 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")
但它应该以自动方式工作,所以编码后的输出是这样的:
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'