Поддерживает ли python 3.1.3 юникод в модуле csv?

Я использовал Python 2.6. Пока я писал программу на python для обработки результата запроса (в формате csv) с сервера sql. Я обнаружил, что он не поддерживает Unicode.

Когда я запускаю программу с CSV-файлом, появляется сообщение об ошибке:

    for row in csvReader:
Error: line contains NULL byte

После сохранения файла CSV в формате ANSI/ASCII с помощью Ultraedit программа работает нормально.

Я попытался включить параметр кодирования, но это не удалось:

csvReader = csv.reader(open(fname, mode='rb', encoding='unicode'), delimiter=',')
TypeError: 'encoding' is an invalid keyword argument for this function

csvReader = csv.reader(open(fname, mode='rb', encoding='utf-8'), delimiter=',')
TypeError: 'encoding' is an invalid keyword argument for this function

Интересно, поддерживает ли Python 3 чтение Unicode? Это может сэкономить мне много работы.

2 ответа

Python 3 определенно поддерживает юникод. Я предполагаю, что вы указали неправильную (или нет?) Кодировку, когда открывали файл CSV для чтения. Смотрите: http://docs.python.org/release/3.1.3/library/functions.html

И попробуйте что-то вроде:

reader = csv.reader(open("foo.csv", encoding="utf-8"))

Изменить: Если вы используете Python 2.6, вы можете достичь того же результата с:

import codecs
reader = csv.reader(codecs.open("foo.csv", encoding="utf-8"))

ОДНАКО если вы получаете нулевые байты, ваш файл может быть закодирован с использованием "utf-16"Попробуйте, если файл не может быть декодирован с использованием utf-8.

На аналогичный вопрос уже ответил Python CSV error: строка содержит NULL байт

Также попробуйте открыть его в режиме "rb" вместо "rU"

Другие вопросы по тегам