Я пытаюсь открыть URL, который имеет символ Unicode (é). Когда я пишу это непосредственно в функции, я получаю эту ошибку:
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
латиница-1: b' https://www.mypage.net/c\xe9line
ascii: b 'https://www.mypage.net/cline
Так что вопрос в том, как мне преобразоватьstring "https://www.mypage.net/céline" в то, что может использовать функция urlopen?
urlopen
Я работаю с ATOM-редактором и Python 3.6.5 (v3.6.5: f59c0932b4, 28 марта 2018, 17:00: 18) [MSC v.1900 64 бит (AMD64)] на win32
Спасибо!
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'