I did this:
import cStringIO.StringIO as StringIO
And I realize I\'ve been using it everywhere. Is that fine? Is it treated the same as String
They are not the same. cStringIO
doesn't correctly handle unicode characters.
>>> 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)
Nor can you set attributes on a cStringIO.StringIO instance:
>>> 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'
Several libraries depend on File-like objects having either a name
or content_type
attribute, so cStringIO.StringIO does not work in these instances.