【问题标题】:io.StringIO encoding in python3python3中的io.StringIO编码
【发布时间】:2012-03-11 06:00:19
【问题描述】:

我似乎无法在 Python3 中找到 io.StringIO 的默认编码。是不是和stdio 一样的语言环境?

我怎样才能改变它?

使用stdio,似乎只需使用正确的编码重新打开即可,但没有像重新打开StringIO 这样的事情。

【问题讨论】:

    标签: encoding utf-8 python-3.x stringio


    【解决方案1】:

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

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

    【讨论】:

    • 另一个答案已经是有效的,但我不仅想告诉没有这样的事情,还想告诉“如何解决它”。
    • 谢谢!这就是我想要替换 StringIO.StringIO 同时保持 bytes 输出的内容。
    【解决方案2】:

    io.StringIO 类与 Python 3 中的 str 对象一起使用。也就是说,您只能从 StringIO 实例读取和写入 字符串。没有编码 - 如果您想在 bytes 对象中编码从 StringIO 获得的字符串,则必须选择一个,但字符串本身没有编码。

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

    【讨论】:

    • 引用“没有编码”:如果我这样做stdout = io.StringIO(),那么print()会有哪个编码标准?
    • @GiovanniFunchal:仍然没有,因为您在那里编写的所有字符串仍然是字符串。它们没有被编码。
    • 所以如果我在开头使用# coding:utf-8,缓冲区中print("foo")的编码将是utf-8?
    • @GiovanniFunchal:你在这里混合了概念。 # coding:utf-8 描述了源文件的编码。源文件中的字符串文字以 UTF-8 编码,但在加载程序时将被解码为字符串对象。如果将这样的字符串对象写入StringIO 实例,它仍然是字符串。同样,strings 本身在 Python 3 中没有编码。
    • @GiovanniFunchal: 不,当您将字符串写入stdout 时,无论如何都会使用stdout 的编码对其进行编码,无论该字符串是来自StringIO 还是来自任何其他来源。 (我建议阅读Python 3 Unicode Howto 以消除您的误解。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 2019-03-16
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多