Проблема разбора python xml.sax с выделенными символами - PullRequest
4 голосов
/ 24 ноября 2011

Следующий код вызывает общеизвестную ошибку «UnicodeDecodeError: кодек ascii» не может декодировать »:

import xml.sax
import io
parser = xml.sax.make_parser()
parser.parse(io.StringIO(u'<a>é</a>'))

В то время как

import xml.sax
parser = xml.sax.make_parser()
parser.parse(open('foo'))

работает (содержимое файла "foo" <a>é</a>).

Мне нужно разобрать строку XML в моем случае, а не файл.

Есть ли решение моей проблемы? Спасибо.

1 Ответ

2 голосов
/ 24 ноября 2011

Файл содержит байты и должен иметь некоторую кодировку для хранения символов Unicode, поэтому вместо него используйте объект BytesIO :

#coding: utf8
import xml.sax 
import io 
parser = xml.sax.make_parser() 
parser.parse(io.BytesIO(u'<a>é</a>'.encode('utf8')))

Примечание: #coding: utf8 указывает кодировку исходный файл ;.encode('utf8') указывает кодировку строки Unicode, которая будет сохранена в объекте BytesIO.Технически, используя не-Unicode строку:

#coding: utf8
parser.parse(io.BytesIO('<a>é</a>'))

также будет работать, так как строки байтов уже будут в кодировке исходного файла, но это делает намерение более понятным.Исходный файл и кодировка BytesIO могут отличаться.

...