Выполнение файлового ввода-вывода в Python с не-ASCII символами - PullRequest
4 голосов
/ 21 января 2011

Я работаю над скриптом Python, который читает XML-файл, закодированный с помощью UTF-8, выполняет некоторые манипуляции с ним и сохраняет его в хранилище данных Google (это программа App Engine).

Я читаю и анализирую файлы только с помощью file.readline () и нескольких регулярных выражений. Единственная проблема заключается в том, что файл, с которым я работаю, содержит символы из разных языков, например, он может содержать символы é или Å, русский или греческий.

Сначала я получал такую ​​ошибку: «UnicodeDecodeError: кодек« ascii »не может декодировать байт 0xd0 в позиции 0: порядковый номер не в диапазоне (128)». Затем я попытался переключить кодировку открытого файла на «ISO-8859-15», что избавляет от ошибки, но выводимые символы отображаются неправильно.

Итак, мой вопрос: как работать с файлом, закодированным в UTF-8 в Python, без застревания Python на всех специальных символах в файле? Я надеюсь, что это было достаточно ясно, и заранее спасибо за любой совет.

Ответы [ 3 ]

4 голосов
/ 21 января 2011

Укажите кодировку UTF-8 для str.decode

>>> print '\xe2\x99\x9e'.decode('utf-8')
♞

Это должно быть шахматная фигура, но она слишком мала, чтобы ее увидеть :)

1 голос
/ 21 января 2011

Вы говорите, что изменили кодировку, которую вы используете с файлом, на ISO-8859-1.Вы пытались изменить его на UTF-8?

0 голосов
/ 21 января 2011

Чтобы расширить ответ и со ссылкой на effbot , вы можете обработать каждую строку следующим образом:

raw = file.readline()
proc = raw.decode('utf-8')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...