10

我正在使用一个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。这个问题有更优雅的解决方案吗?

4

1 回答 1

10

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
于 2010-09-20T08:58:18.637 回答