Csv reader открывает файлы по-разному в Django и Apache

Мне нужно разобрать файл csv внутри моего приложения Django. Файл csv может содержать некоторые неасксиальные символы, которые мне нужно удалить перед обработкой. Вот как выглядит мой код

    with open(inputFile, newline='') as f:
        reader = csv.reader(f)
        row1 = next(reader)
        for element in row1:
            columnHeader = element.encode("ascii","ignore").decode("ascii").strip()

В Django standalone это работает совершенно нормально. Но я получаю

"'ascii' codec cannot decode byte 0xef in position 0: ordinal not in range(128)"

когда я запускаю его в продакшене (Apache, mod_wsgi, Django). Я пробовал немного другую формулировку, но безрезультатно.

            columnHeader = element.encode("ascii","ignore").decode()

Я новичок в Apache, Django и Python - поэтому у меня немного не хватает идей.

(Обе среды находятся на одной машине - Ubuntu).

Оказалось, что по какой-то причине среда Apache + mod_wsgi по умолчанию открывала файлы с другой кодировкой.

Явное добавление параметра кодировки таким образом решило мою проблему.

with open(inputFile, newline='', encoding='utf-8') as f:

В моей работе я реально ожидаю только файлы csv в кодировке utf-8 или ascii ( пользователи, загружающие эти файлы, используют Microsoft excel для их создания). Приведенное выше решение будет работать для обеих кодировок.

Если у кого-то есть необходимость в поддержке других кодировок, я думаю, что тема довольно быстро становится сложной.

Вернуться на верх