Actually there are 3 :D - `cStringIO.StringIO` which accepts only `bytes` or strings that can be decoded using the `ascii` encoding, `StringIO.StringIO` that accepts both `bytes` and `str` and returns the same thing it was created with, and `io.StringIO` which accepts only `str` (I'm using the python 3 terminology so `str` == `unicode`).

Yes the idea is to create something like the django's `safe_str` method, but `SafeStringIO` that will accept any of them and always emit unicode...

But I'll create a new issue and we can discuss that there, I'll reference this conversation from there.