Страницы

Поиск по вопросам

понедельник, 10 июня 2019 г.

utf-8' codec can't decode byte 0x89 in position 0: invalid start byte при открытии фото

Имеется Django модель user.path, в которой лежит название фото в формате
"{:%Y-%m-%d %H-%M-%S}.png".format(datetime.now())
Тоесть вот такого вида 2018-01-19 12-17-07.png
Пытаюсь отправить ее пользователю
ppath = 'путь к директории с фото' photo = open(ppath + urllib.parse.unquote_plus(user.path))
Но в итоге получаю ошибку
utf-8' codec can't decode byte 0x89 in position 0: invalid start byte


Ответ

Почему open(..., 'rb') помогло?
Дело в том, что без по умолчанию open открывает файлы в режим чтения r. Этот режим включает в себя чтение массива байтов и приведение его к строке, используя указанную кодировку (или системную кодировку, если не указывать).
Файлы фотографий (картинок) являются бинарными файлами, поэтому попытка получения из них текста в указанной кодировке, скорее всего, вызовет ошибку:
ppath = 'путь к директории с фото' photo = open(ppath + urllib.parse.unquote_plus(user.path))
Поэтому, открытие файла в бинарном режиме и помогло:
ppath = 'путь к директории с фото' file_name = ppath + urllib.parse.unquote_plus(user.path) photo = open(file_name, 'rb')

Комментариев нет:

Отправить комментарий