--- Отредактировано ниже с дополнительным тестированием, пожалуйста, прочитайте :) ---
Я изо всех сил пытаюсь построить тело из нескольких частей / форм-данных в Python, в основном я делаю это с буфером строк в списке, а затем пытаюсь присоединиться к ним, вот код:
fp = open(filename, 'rb')
BOUNDARY = 's0m3r4ndomB0unD4ry'
body = []
body.append('--' + BOUNDARY)
body.append('Content-Disposition: form-data; name="image"; filename="%s"' % filename)
body.append('Content-Type: %s' % file_type)
body.append('')
body.append(fp.read())
body.append('--' + BOUNDARY + '--')
body.append('')
fp.close()
body = '\r\n'.join(body)
Сначала это казалось простым, и этот код работает в оболочке Python, но при интеграции с моим приложением Django он просто выдает UnicodeDecodeError
с таким сообщением:
'ascii' codec can't decode byte 0x89 in position 0: ordinal not in range(128)
Я не могу понять, почему это происходит только внутри приложения Django, а не в оболочке, кто-то может просветить меня?
РЕДАКТИРОВАТЬ : После некоторого тестирования я обнаружил, что рецепт на сайте ActiveState содержит комментарий с обходным решением:
body = CRLF.join([element.decode('string_escape') for element in L])
Это остановило UnicodeDecodeError
от броска, но портит некоторые изображения, поэтому для меня это не исправлено: /
Что странно, так это то, что это происходит только в веб-приложении Django, если я запускаю ту же команду с python manage.py shell
, она будет работать, как и ожидалось, даже без вышеупомянутого исправления.
Кто-нибудь знает, какая разница в среде между оболочкой и веб-сервером может вызвать эту проблему?