使用io.StringIO模拟文件时出现Unicode问题

时间:2010-09-20 07:48:48

标签: python unicode stringio

我正在使用io.StringIO对象来模拟一个类的单元测试中的文件。问题是这个类似乎希望默认情况下所有字符串都是unicode,但内置str不会返回unicode字符串:

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

但是

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

的工作原理。我假设这是因为与unicode字符串的串联也会使结果成为unicode。这个问题有更优雅的解决方案吗?

1 个答案:

答案 0 :(得分:9)

io包提供python3.x兼容性。在python 3中,默认情况下字符串是unicode。

您的代码可以使用标准的StringIO包

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

如果你想用python 3方式,使用unicode()代替str()。你必须在这里明确。

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