UnicodeDecodeError с запросом Django. ФАЙЛЫ

Существуют приблизительно интересная работа сделанный при получении хорошей установки экрана гну, происходящей по умолчанию в следующей версии Сервера Ubuntu, который включает использование нижней части экрана для показа всех окон, а также другие полезные детали машины (как # обновляет доступный и нужна ли машине перезагрузка). Можно, вероятно, захватить их .screenrc и настроить его к потребностям.

самые полезные команды я имею в моем .screenrc, следующий

shelltitle "$ |bash" # make screen assign window titles automatically
hardstatus alwayslastline "%w" # show all window titles at bottom line of term

Этот способ, которым я всегда знаю, какие окна открыты, и что работает в них в данный момент, также.

6
задан bluish 7 September 2011 в 14:51
поделиться

4 ответа

В Django есть несколько утилит , которые обрабатывают это (smart_unicode, force_unicode, smart_str). Обычно вам нужен просто smart_unicode.

from django.utils.encoding import smart_unicode
def view(request):
    body = u""  
    for filename, f in request.FILES.items():
        body = body + 'Filename: ' + filename + '\n' + smart_unicode(f.read()) + '\n'
6
ответ дан 8 December 2019 в 13:46
поделиться

вы добавляете f.read () непосредственно в строку unicode, не декодируя ее, если данные, которые вы читаете из файла, имеют кодировку utf-8, используйте utf-8, иначе используйте любую кодировку. находится в.

сначала декодирую его, а затем добавляю в тело , например,

data = f.read().decode("utf-8")
body = body + 'Filename: ' + filename + '\n' + data + '\n'
4
ответ дан 8 December 2019 в 13:46
поделиться

Ответ Анурага правильный. Однако еще одна проблема заключается в том, что вы не можете точно знать кодировку файлов, загружаемых пользователями. Может быть полезно перебрать кортеж из наиболее распространенных, пока вы не получите правильный:

encodings = ('windows-xxx', 'iso-yyy', 'utf-8',)
for e in encodings:
    try:
        data = f.read().decode(e)
        break
    except UnicodeDecodeError:
        pass
4
ответ дан 8 December 2019 в 13:46
поделиться

Если вы не контролируете кодировку файлов для файлов, которые могут быть загружены, вы можете догадаться, в какой кодировке находится файл, используя модуль Универсальный детектор кодирования ] chardet .

3
ответ дан 8 December 2019 в 13:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: