Encoding python3中的io.StringIO编码

Encoding python3中的io.StringIO编码,encoding,utf-8,python-3.x,stringio,Encoding,Utf 8,Python 3.x,Stringio,我似乎找不到Python3中的io.StringIO的默认编码。它的区域设置是否与stdio相同 我怎样才能改变它 对于stdio,似乎只要用正确的编码重新打开就行了,但是没有什么比重新打开StringIO类io.StringIO在Python3中与str对象一起工作。也就是说,您只能从StringIO实例读取和写入字符串。没有编码——如果要将从StringIO获得的字符串编码到bytes对象中,则必须选择一个编码,但字符串本身没有编码 (当然,字符串需要在某些编码中进行内部表示。根据您的解释器

我似乎找不到Python3中的
io.StringIO
的默认编码。它的区域设置是否与stdio相同

我怎样才能改变它


对于
stdio
,似乎只要用正确的编码重新打开就行了,但是没有什么比重新打开
StringIO
io.StringIO
在Python3中与
str
对象一起工作。也就是说,您只能从
StringIO
实例读取和写入字符串。没有编码——如果要将从
StringIO
获得的字符串编码到
bytes
对象中,则必须选择一个编码,但字符串本身没有编码


(当然,字符串需要在某些编码中进行内部表示。根据您的解释器,该编码是UCS-2或UCS-4,但在使用Python时,您看不到此实现细节。)

如另一个答案中所述,
StringIO
保存(unicode)字符串,因此没有编码。 如果您确实需要一个具有编码的类似对象,您可能需要查看一下

如果您想设置标准输出的编码:您不能。至少不是直接的,因为
sys.stdout.encoding
是只写的,并且(通常)是由Python自动确定的。(使用管道时不起作用)
如果您想将具有特定编码的字节字符串写入stdout,那么您可以使用正确的编码(Python 2)对打印的字符串进行编码,或者使用
sys.stdout.buffer.write()
(Python 3)将已编码的字节字符串发送到stdout。

引用“没有编码”:如果我执行
stdout=io.StringIO()
,该怎么办,那么哪个编码标准
print()。它们没有编码。因此,如果我在开始时使用
#编码:utf-8
,缓冲区中
print(“foo”)
的编码将是
utf-8
?@GiovanniFunchal:您在这里混合了概念<代码>#编码:utf-8
描述源文件的编码。源文件中的字符串文字以UTF-8编码,但在加载程序时将被解码为字符串对象。如果将这样的字符串对象写入
StringIO
实例,它仍然是字符串。同样,字符串本身在Python 3中没有编码。@GiovanniFunchal:不,当您将字符串写入
stdout
时,不管字符串来自
StringIO
还是来自任何其他源,它都将使用
stdout
的编码。(我建议你阅读这篇文章来澄清你的误解。)另一个答案已经是正确的,但我不仅想告诉你没有这样的事情,还想告诉你“如何解决它”。谢谢!这就是我在维护
字节
输出的同时要替换的
StringIO.StringIO