我对同一个项目使用了windows和linux机器。 windows上stdin的默认编码是cp1252,在linux上是utf-8。如何更改Python上的stdin编码
我想将所有内容都更改为uft-8。 这可能吗?我该怎么做?
感谢 爱德华
我对同一个项目使用了windows和linux机器。 windows上stdin的默认编码是cp1252,在linux上是utf-8。如何更改Python上的stdin编码
我想将所有内容都更改为uft-8。 这可能吗?我该怎么做?
感谢 爱德华
您可以通过打印东西的时候不依赖于隐式编码做到这一点。在任何情况下都不依赖这是一个好主意 - 隐式编码仅在打印到标准输出以及标准输出连接到终端时使用。
更好的方法是随处使用unicode
,并随处使用codecs.open
或codecs.getwriter
。你在一个对象,使用自动编码的Unicode字符串为UTF-8包裹sys.stdout
,例如:
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
,如果你使用unicode到处这只会工作,虽然。所以,到处都要使用unicode。真的,到处都是。
这是一个老问题,但仅供参考。
读取来自stdin
UTF-8
,使用:
UTF8Reader = codecs.getreader('utf8')
sys.stdin = UTF8Reader(sys.stdin)
# Then, e.g.:
for _ in sys.stdin:
print _.strip()
要写入到UTF-8
stdout
,使用:
UTF8Writer = codecs.getwriter('utf8')
sys.stdout = UTF8Writer(sys.stdout)
# Then, e.g.:
print 'Anything'
Python的自动检测标准输入的编码。我发现,当指定自动检测工作不正常的编码最简单的方法是使用PYTHONIOENCODING环境变量,如下面的例子:
pipeline | PYTHONIOENCODING="UTF-8" /path/to/your-script.py
有关编码检测的详细信息,并在不同的这个变量平台,你可以看看sys.stdin文档。
stdin呢? – duduklein 2010-04-29 20:25:09
stdin不会被自动解码,所以你必须自己做这件事。假设输入是UTF-8可能不是一个好主意,但是如果你真的想的话,还有'codecs.getreader('utf-8')(sys.stdin)'。 – 2010-04-29 21:44:32
请注意,与Python 2相比,Python 3实际上会自动解码stdin:http://docs.python.org/3/library/sys.html#sys.stdin - 此行为可以按照文档中所述进行更改。 – 2014-02-08 18:00:47