Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 28, 2012 16:03:43

DHT
От:
Зарегистрирован: 2009-09-24
Сообщения: 119
Репутация: +  0  -
Профиль   Отправить e-mail  

И снова Unicode (в файлах изображений)

Добрый день,
промучался пол дня уде, помогите советом:

Python 2.7
Для упрощения кода все модули начинаются с импорта

from __future__ import unicode_literals

что делает конструкции вида :
request = 'multipart {0}'

сразу же в Unicode и избалвяет от везде в начале строки:
request = u'multipart {0}'

но если я скачиваю файл через GET запрос, содержимое которого хранится в переменной img типа строка.
а затем пытаюсь совместить request и img через:
request = request.format(img)

то сразу же получаю ошибку Unicode Decode Error.
предварительный вызов
img.decode('utf-8')
не работает, т.к. видимо изображение состоит из символов, которые нельзя декодировать.

подскажите плиз как решить проблему не удаляя from __future__ import unicode_literals?



Офлайн

#2 Ноя. 28, 2012 17:19:20

adray
Зарегистрирован: 2012-09-15
Сообщения: 123
Репутация: +  18  -
Профиль   Отправить e-mail  

И снова Unicode (в файлах изображений)

Относительно последнего:

img.decode('utf-8')
decode - байты в символы
encode - символы в байты

соответственно, нужно делать
img.encode('utf-8')

Для упрощения кода все модули начинаются с импорта
имхо это не упрощение, а запутывание

Отредактировано adray (Ноя. 28, 2012 17:21:26)

Офлайн

#3 Ноя. 28, 2012 18:36:37

DHT
От:
Зарегистрирован: 2009-09-24
Сообщения: 119
Репутация: +  0  -
Профиль   Отправить e-mail  

И снова Unicode (в файлах изображений)

adray,

img.encode('utf-8')
вызывает ту же ошибку декодирования.

и почему запутывания? разве это не делает схожим по функционалу 2-ую ветку с 3-ей в плане работы со строками ?




Офлайн

#4 Ноя. 28, 2012 20:22:57

adray
Зарегистрирован: 2012-09-15
Сообщения: 123
Репутация: +  18  -
Профиль   Отправить e-mail  

И снова Unicode (в файлах изображений)

DHT
вызывает ту же ошибку декодирования.
Это уже вопрос к формату изображения
DHT
содержимое которого хранится в переменной img типа строка.
строка в какой кодировке? Сдается мне, что не utf-8
DHT
и почему запутывания? разве это не делает схожим по функционалу 2-ую ветку с 3-ей в плане работы со строками ?
Это неплохо, если в ближайшем будущем вы планируете портировать все на тройку, иначе будет постоянный разрыв шаблона при работе со строками

Офлайн

#5 Ноя. 28, 2012 20:40:11

DHT
От:
Зарегистрирован: 2009-09-24
Сообщения: 119
Репутация: +  0  -
Профиль   Отправить e-mail  

И снова Unicode (в файлах изображений)

adray
строка в какой кодировке? Сдается мне, что не utf-8
Cдается и мне, что не в utf-8. Могут ли вообще файлы изображений быть в utf?
Мне кажется, что нет и как тогда формировать multipart/form-data?

Вот точная ошибка, которую выдает Python.
UnicodeDecodeError: 'utf8' codec can't decode byte 0x89 in position 0: invalid start byte

adray
если в ближайшем будущем вы планируете портировать
Планирую. И уже впринципе можно пробовать. Был бы FTP модуль, который мог бы работать через соксы - уже бы портировал, а так приходится довольствоваться pycurl-ssl-7.19.0



Офлайн

#6 Ноя. 28, 2012 20:52:22

adray
Зарегистрирован: 2012-09-15
Сообщения: 123
Репутация: +  18  -
Профиль   Отправить e-mail  

И снова Unicode (в файлах изображений)

DHT
Могут ли вообще файлы изображений быть в utf?
В принципе, никто им не запретит, но обычно они хранятся в бинарных файлах, а что у Вас в строке в итоге получается, мне не известно.

Офлайн

#7 Ноя. 28, 2012 20:59:18

DHT
От:
Зарегистрирован: 2009-09-24
Сообщения: 119
Репутация: +  0  -
Профиль   Отправить e-mail  

И снова Unicode (в файлах изображений)

adray
но обычно они хранятся в бинарных файлах
мне кажется мы идем правильным путем.
попробовал открыть файл с картинкой:

file = open('С:/1.png', 'rb')
text = file.read()

при этом принт
print(type(text))
выводит <type ‘str’> о чем я и писал в первом посте
но если я скачиваю файл через GET запрос, содержимое которого хранится в переменной img типа строка




Офлайн

#8 Ноя. 28, 2012 21:07:59

DHT
От:
Зарегистрирован: 2009-09-24
Сообщения: 119
Репутация: +  0  -
Профиль   Отправить e-mail  

И снова Unicode (в файлах изображений)

вот пример кода, который приводит к ошибке, помогите подправить…

file = open('C:/1.png', 'rb')
test = u' добавить файл: {0} '.format(file.read())
file.close()



Офлайн

#9 Ноя. 28, 2012 21:49:15

adray
Зарегистрирован: 2012-09-15
Сообщения: 123
Репутация: +  18  -
Профиль   Отправить e-mail  

И снова Unicode (в файлах изображений)

например так

file.read().encode('string_escape')
или
file.read().encode('base64')

Офлайн

#10 Ноя. 29, 2012 09:58:57

DHT
От:
Зарегистрирован: 2009-09-24
Сообщения: 119
Репутация: +  0  -
Профиль   Отправить e-mail  

И снова Unicode (в файлах изображений)

adray
например так
увы, но оба метода искажают изображение при загрузке. Точнее оно вообще не отображается.

Сохранил отправленные изображения на комп. Вот скриншоты их содержимого:



Отредактировано DHT (Ноя. 29, 2012 09:59:17)

Прикреплённый файлы:
attachment compare.png (53,3 KБ)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version