Python 2.7:reload(sys)禁用错误消息并在Windows中打印

Mad*_*s Y 7 python printing utf-8 sys

我正在创建一个脚本,要求我将编码格式更改为"UTF-8".我在Stachoverflow上找到了一个主题,说我可以使用:

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
Run Code Online (Sandbox Code Playgroud)

它在OSX 10.8(也许是早期版本)中运行良好,但在Windows XP和Windows 7(可能是Vista和8)中它会禁用解释器中的所有反馈.脚本仍在运行,但我无法打印任何内容或查看是否有任何问题.

有没有办法修补当前代码或是否有另一种方法来更改编码?

soc*_*tes 6

可能是你发生了与空闲有关的事情,因为空闲用自己的对象替换默认的sys.stdin,sys.stdout,sys.stderr.重新加载(sys)后,与sys关联的三个文件对象将恢复为默认值,因此您无法在空闲状态下看到它.

您可以通过在重新加载(sys)后更改它来解决它:

import sys
stdin, stdout, stderr = sys.stdin, sys.stdout, sys.stderr
reload(sys)
sys.stdin, sys.stdout, sys.stderr = stdin, stdout, stderr
Run Code Online (Sandbox Code Playgroud)


Nam*_*mey 1

坦率地说,我不知道为什么你可能想要改变 Python 的默认编码只是为了读取和解析单个文件(甚至大量文件)。Python 可以非常轻松地解析和处理 UTF-8,无需采取如此激烈的措施。此外,在这个网站上,有一些很棒的方法可以做到这一点。此问题接近于以下问题的重复:Unicode (UTF-8) Reading andwriting to files in Python

在这一行上,最好的答案是:/sf/answers/59111041/,它基本上依赖于Python Codecs模块。

使用这种方法,您可以执行以下操作:

import codecs
with codecs.open("SomeFile", "rb", "utf-8") as inFile: 
    text = inFile.read()
# Do something with 'text' here
with codecs.open("DifferentFile", "wb", "utf-8") as outFile:
    outFile.write(text)
Run Code Online (Sandbox Code Playgroud)

这成功读取了 UTF-8 格式的文件,然后将其作为 UTF-8 写回。变量“text”将是 Python 中的 unicode 字符串。您始终可以将其写回为 UTF-8 或 UTF-16 或任何兼容的输出格式。