UnicodeEncodeError с urlopen (.. net / cé ..) - PullRequest
       8

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

0 голосов
/ 26 августа 2018

Я пытаюсь открыть 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?

Я работаю с ATOM-редактором и Python 3.6.5 (v3.6.5: f59c0932b4, 28 марта 2018, 17:00: 18) [MSC v.1900 64 бит (AMD64)] на win32

Спасибо!

1 Ответ

0 голосов
/ 26 августа 2018

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'
...