2010-09-20 5 views
9

Używam obiektu io.StringIO do wyśmiewania pliku w teście jednostek dla klasy. Problem polega na tym, że ta klasa wydaje się spodziewać wszystkie ciągi być Unicode domyślnie, ale wbudowane str nie zwraca unicode ciągi:Problemy z kodowaniem Unicode w przypadku użycia parametru io.StringIO do fałszywego pliku

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

Ale

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

prace. Zakładam, że dzieje się tak dlatego, że konkatenacja z łańcuchem unicode sprawia, że ​​wynik również unicode. Czy istnieje bardziej eleganckie rozwiązanie tego problemu?

Odpowiedz

9

Pakiet io zapewnia zgodność z python3.x. W pythonie 3 łańcuchy są domyślnie w standardzie Unicode.

Twój kod działa poprawnie ze standardowym pakietem StringIO,

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

Jeśli chcesz zrobić to tak, pyton 3, używać unicode() w zastępstwie str(). Musisz być tutaj wyraźny.

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