Dove sta scritto che parseString supporta le stringhe unicode?
Io
qui non lo trovo.
Se leggi la doc capisci che parseString è implementato in questo modo:
[hlpycode]
from StringIO import StringIO
def parseString(text):
fobj = StringIO(text)
parse(fobj)
[/hlpycode]
Sicuramente il problema stà nella trasformazione da stringa a StringIO:
[hlpycode]>>> from StringIO import StringIO
>>> fobj = StringIO(u'<tag>è</tag>')
>>> for x in fobj:
... print x,
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 5-6: ordinal not in range(128)
>>> fobj.seek(0)
>>> t = fobj.read()
>>> t
u'<tag>\xc3\xa8</tag>'
>>> print t
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 5-6: ordinal not in range(128)
>>> print t.encode('utf-8')
<tag>è</tag> #<-- non c'è più la "è"...
[/hlpycode]
Usando gli escape invece funziona:
[hlpycode]>>> print StringIO(u'<tag>\xe8</tag>').read().encode('utf-8')
<tag>è</tag> #la "è" è rimasta.
[/hlpycode]