7

我正在制作一个脚本,要求我将编码格式更改为“UTF-8”。我在 Stachoverflow 上找到了一个主题说我可以使用:

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

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

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

4

2 回答 2

6

可能发生在你身上的事情与空闲有关,因为空闲用它自己的对象替换默认的 sys.stdin、sys.stdout、sys.stderr。reload(sys)后,与sys关联的三个文件对象会恢复为默认的,所以空闲时看不到。

您可以通过在 reload(sys) 后将它们改回来来解决它:

import sys
stdin, stdout, stderr = sys.stdin, sys.stdout, sys.stderr
reload(sys)
sys.stdin, sys.stdout, sys.stderr = stdin, stdout, stderr
于 2014-05-24T16:30:40.663 回答
1

坦率地说,我不知道为什么您可能想要更改 Python 的默认编码只是为了读取和解析单个文件(或者甚至是大量文件)。Python 可以很容易地解析和处理 UTF-8,而无需采取如此严厉的措施。此外,在这个网站上,有一些很棒的方法可以做到这一点。此问题接近重复:Unicode (UTF-8) reading and writing to files in Python

在那条线上,最好的答案是:https ://stackoverflow.com/a/844443/678533 ,它基本上依赖于 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)

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

于 2013-02-14T05:56:15.983 回答