dimanjy
@dimanjy
Недопрограммист и полуинженер.

Где теряется кодировка при отправке файла через POST?

Спасите!

Есть парсер на питоне, есть файл в кодировке UTF-8.

Когда читаю файл с диска, парсер его нормально жует:
import codecs
txt = codecs.open('file.txt', 'r', encoding='utf-8').read()
result = parse(txt) # OK!


Когда этот же файл вставляю в форму textarea и отправляю на сервер через POST, то парсер перестает работать. В частности он уже не может найти символ переноса строки
txt = request.POST.get('txt')
result = parse(txt) # Облом! Не находит '\n'!


В парсере есть поиск по регуляркам и поиск по src.startswith()
if src.startswith('\n'):
    ...


Вообще интересует вопрос, где что в какой кодировке бродит? На сервере Django.

По идее при отправке через форму все преобразуется в urlencode, но потом после приема все должно назад приводиться к UTF-8, что подтверждается выводом данных из POST обратно в шаблон. Т.е. в textarea выводится все тот же файл, все с теми же переносами... Но парсер почему-то уже так не считает :(
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
dimanjy
@dimanjy Автор вопроса
Недопрограммист и полуинженер.
Оказалось, что при прогоне через textarea POST у файла концы строк \n автоматически заменяются на \n\r, что удалось разглядеть только сохранив POST-файл и сравнив с исходным.

При этом print() выводит в консоль все одинаково, поэтому найти отличия можно только в редакторе, который имеет функцию отображения спец-символов переносов строки (mcedit под linux, например).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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