【发布时间】:2011-06-08 07:55:19
【问题描述】:
我这样做了:
import cStringIO.StringIO as StringIO
我意识到我一直在使用它。可以吗? 是不是和StringIO一样对待?
【问题讨论】:
我这样做了:
import cStringIO.StringIO as StringIO
我意识到我一直在使用它。可以吗? 是不是和StringIO一样对待?
【问题讨论】:
它们不一样。 cStringIO 无法正确处理 unicode 字符。
>>> StringIO.StringIO().write(u'\u0080')
>>> cStringIO.StringIO().write(u'\u0080')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\x80' in position 0: ordinal not in range(128)
【讨论】:
cStringIO.StringIO().write(u'\u2603') 不起作用,但 cStringIO.StringIO().write(u'\u2603'.encode('utf-8')) 可以正常工作。
您也不能在 cStringIO.StringIO 实例上设置属性:
>>> from cStringIO import StringIO
>>> s = StringIO()
>>> s.name = 'myfile'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'cStringIO.StringO' object has no attribute 'name'
一些库依赖于具有name 或content_type 属性的类文件对象,因此cStringIO.StringIO 在这些情况下不起作用。
【讨论】: