Найти - Пользователи
Полная версия: И снова Unicode (в файлах изображений)
Начало » Python для новичков » И снова Unicode (в файлах изображений)
1 2
DHT
Добрый день,
промучался пол дня уде, помогите советом:

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?
adray
Относительно последнего:
img.decode('utf-8')
decode - байты в символы
encode - символы в байты

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

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

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

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


adray
DHT
вызывает ту же ошибку декодирования.
Это уже вопрос к формату изображения
DHT
содержимое которого хранится в переменной img типа строка.
строка в какой кодировке? Сдается мне, что не utf-8
DHT
и почему запутывания? разве это не делает схожим по функционалу 2-ую ветку с 3-ей в плане работы со строками ?
Это неплохо, если в ближайшем будущем вы планируете портировать все на тройку, иначе будет постоянный разрыв шаблона при работе со строками
DHT
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
adray
DHT
Могут ли вообще файлы изображений быть в utf?
В принципе, никто им не запретит, но обычно они хранятся в бинарных файлах, а что у Вас в строке в итоге получается, мне не известно.
DHT
adray
но обычно они хранятся в бинарных файлах
мне кажется мы идем правильным путем.
попробовал открыть файл с картинкой:

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

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


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

file = open('C:/1.png', 'rb')
test = u' добавить файл: {0} '.format(file.read())
file.close()
adray
например так
file.read().encode('string_escape')
или
file.read().encode('base64')
DHT
adray
например так
увы, но оба метода искажают изображение при загрузке. Точнее оно вообще не отображается.

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

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB