Поддерживает ли 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"