13

我似乎找不到io.StringIOPython3 中的默认编码是什么。它是与 locale 一样stdio吗?

我怎样才能改变它?

使用stdio, 似乎只是用正确的编码重新打开就可以了,但是没有像重新打开StringIO.

4

2 回答 2

14

该类io.StringIO适用str于 Python 3 中的对象。也就是说,您只能从实例中读取和写入字符串。StringIO没有编码——如果你想对从对象StringIO中得到的字符串进行编码,你必须选择一个bytes,但字符串本身没有编码。

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

于 2012-02-20T21:47:32.350 回答
6

正如另一个答案中已经提到的,StringIO将(unicode)字符串保存在内存中,因此没有编码。如果您确实需要带有编码的类似对象,您可能需要查看BytesIO.

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

于 2013-10-13T12:27:07.560 回答