代码之家  ›  专栏  ›  技术社区  ›  Björn Pollex

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

  •  9
  • Björn Pollex  · 技术社区  · 14 年前

    我用的是 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 回复  |  直到 14 年前
        1
  •  9
  •   Ivo van der Wijk    14 年前

    IO包提供python3.x兼容性。在Python3中,字符串默认为Unicode。

    您的代码可以与标准的Stringio包一起工作,

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

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

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