Сталкнулся с тривиальной, на первый взгляд, проблемой, но уже 5 часов не могу ее решить…Облазил кучу форумов. очень много где встречается данная проблема, но решения нигде не нашел.
Итак код следующий:
# -*- coding: utf-8 -*- # -*- coding: 'utf-8' -*- from __future__ import unicode_literals from xml.dom.minidom import Document import urllib2 import StringIO import gzip def do_request(request): data = request data = unicode(data, "utf-8") connection = urllib2.build_opener() connection.addheaders = [('WebKey', '123'), ('Content-Length', len(request)), ('Accept-Charset', 'utf-8')] #response = unicode(connection.open("http://не_скажу/?OperationType=0", data) , "utf-8") response = connection.open("http://не_скажу/?OperationType=1", data).decode('utf-8') #return response.data() #return response.info() return str(response) if response.info().get('Content-Encoding') == 'gzip': buf = StringIO.StringIO( response.read()) gzip_f = gzip.GzipFile(fileobj=buf) content = gzip_f.read() else: content = response.read() return content
Ошибка стандартная: ‘ascii’ codec can't encode characters in position 98-106: ordinal not in range(128)
От себя добавлю, что именно 98-106 идут русские буквы.
Сервер мне должен отправлять в кодировке UTF-8 (покрайней мере они мне так написали)
Я делал много разных вариаций. Заголовки он мне посмотреть не дает - та же ошибка. Валится именно да операции: connection.open("http/не_скажу/?OperationType=1", data) - и преобразовать в unicode никак не получается.
Кто что подскажет?