我對同一個項目使用了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