Файл содержит байты и должен иметь некоторую кодировку для хранения символов 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
могут отличаться.