2010-09-20 6 views
9

Sto utilizzando un oggetto io.StringIO per simulare un file in un test di unità per una classe. Il problema è che questa classe sembra si aspettano che tutte le stringhe da Unicode per impostazione predefinita, ma la funzione interna str non restituisce stringhe Unicode:Problemi Unicode durante l'utilizzo di io.StringIO per simulare un file

>>> buffer = io.StringIO() 
>>> buffer.write(str((1, 2))) 
TypeError: can't write str to text stream 

Ma

>>> buffer.write(str((1, 2)) + u"") 
6 

opere. Presumo questo perché la concatenazione con una stringa unicode rende anche il risultato unicode. C'è una soluzione più elegante a questo problema?

risposta

9

Il pacchetto io fornisce la compatibilità con python3.x. In python 3, le stringhe sono unicode per impostazione predefinita.

Il tuo codice funziona bene con il pacchetto standard StringIO,

>>> from StringIO import StringIO 
>>> StringIO().write(str((1,2))) 
>>> 

Se si vuole farlo nel modo Python 3, utilizzare unicode() al posto di str(). Devi essere esplicito qui.

>>> io.StringIO().write(unicode((1,2))) 
6 
Problemi correlati