Форум сайта python.su
файл в utf-8
URL = 'http://google.ru/search?as_epq=&as_oq=&as_eq=&hl=ru&tbo=1&num=100&lr=&cr=&as_ft=i&as_filetype=&as_qdr=all&as_occt=any&as_dt=i&as_sitesearch=&as_rights=&safe=images&btnG=Поиск+в+Google&start'
File "/home/user/python3/as_http.py", line 222, in _exec
response = urllib.request.urlopen(request)
File "/usr/local/lib/python3.2/urllib/request.py", line 138, in urlopen
return opener.open(url, data, timeout)
File "/usr/local/lib/python3.2/urllib/request.py", line 366, in open
response = self._open(req, data)
File "/usr/local/lib/python3.2/urllib/request.py", line 384, in _open
'_open', req)
File "/usr/local/lib/python3.2/urllib/request.py", line 344, in _call_chain
result = func(*args)
File "/usr/local/lib/python3.2/urllib/request.py", line 1140, in http_open
return self.do_open(http.client.HTTPConnection, req)
File "/usr/local/lib/python3.2/urllib/request.py", line 1122, in do_open
h.request(req.get_method(), req.selector, req.data, headers)
File "/usr/local/lib/python3.2/http/client.py", line 964, in request
self._send_request(method, url, body, headers)
File "/usr/local/lib/python3.2/http/client.py", line 992, in _send_request
self.putrequest(method, url, **skips)
File "/usr/local/lib/python3.2/http/client.py", line 856, in putrequest
self._output(request.encode('ascii'))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 157-161: ordinal not in range(128)
Офлайн
Нужно произвести эскейпинг урла, чтобы там были только ascii символы.
Офлайн
А как тогда, например, открыть http://президент.рф/ ? Похоже, что в urlllib кривизна - там не должно быть только ascii.
Офлайн
agalenпрезидент.рф == xn–d1abbgf6aiiy.xn–p1ai
А как тогда, например, открыть http://президент.рф/ ? Похоже, что в urlllib кривизна - там не должно быть только ascii.
Отредактировано (Март 30, 2011 12:45:22)
Офлайн
regallЭто преобразование и должен делать urllib внутри себя.
президент.рф == xn–d1abbgf6aiiy.xn–p1ai
Офлайн
Звучит разумно, займитесь этим.
Офлайн
agalenПочему вы так решили? Зачем urllib знать дополнительно про кодировки, про punycode и т.п.
Это преобразование и должен делать urllib внутри себя.
Офлайн
Ну, urllib может и не должен, но было бы неполхо, если бы умел. Все-таки это не самый низкий уровень - здесь есть функции формирования и разбора url, другие вспомогательные. Низкий уровень - это когда отдал bytes, получил bytes - с кодировками возись сам.
На ISSUE TRACKER похожие вопросы обсуждались (http://bugs.python.org/issue3991), но пока вопрос открыт.
Офлайн
Кажется, дело заглохло. К тому же в приведенной ссылке настораживает ее древность, отсутствие тестов и ни одного заинтересовавшегося разработчика из core development team. У двух других issues дела обстоят не намного лучше.
Как по мне - налицо явная недоработка, которая рано или поздно будет исправлена. Если этим заняться вплотную - то есть шанс починить до выхода 3.3.
Офлайн
Андрей СветловИсходя из этого можно предположить, что подавляющее число питонеров - пользуются латиницей.
Кажется, дело заглохло. К тому же в приведенной ссылке настораживает ее древность, отсутствие тестов и ни одного заинтересовавшегося разработчика из core development team.
Офлайн