我有一個輸出unicode到控制檯的python腳本,我想將它重定向到一個文件。顯然,python中的重定向過程涉及將輸出轉換爲字符串,所以我得到無法解碼unicode字符的錯誤。我可以將控制檯的unicode輸出直接重定向到文件中嗎?
那麼,有什麼辦法可以重定向到以UTF-8編碼的文件嗎?
我有一個輸出unicode到控制檯的python腳本,我想將它重定向到一個文件。顯然,python中的重定向過程涉及將輸出轉換爲字符串,所以我得到無法解碼unicode字符的錯誤。我可以將控制檯的unicode輸出直接重定向到文件中嗎?
那麼,有什麼辦法可以重定向到以UTF-8編碼的文件嗎?
當打印到控制檯時,Python會查看sys.stdout.encoding
以確定打印前用於對unicode對象進行編碼的編碼。
將輸出重定向到文件時,sys.stdout.encoding
爲無,因此Python2默認爲ascii
編碼。 (相反,Python3默認爲utf-8
。)這在打印unicode時通常會導致異常。
您可以自行打印之前明確編碼的Unicode避免錯誤:
print (unicode_obj.encode('utf-8'))
,或者你可以重新定義sys.stdout
因此,所有輸出在utf-8
編碼:
import sys
import codecs
sys.stdout=codecs.getwriter('utf-8')(sys.stdout)
print(unicode_obj)
在將它打印到控制檯之前,我嘗試編碼我的字符串。我的文件有b符號和\ x01 ... codepoints ...當它寫入文件時,它沒有被解碼 – Malwaregeek 2016-03-23 05:59:46
import codecs
file_object = codecs.open("filename", "w", "utf-8")
file_object.write(u"खऔणन")
file_object.close()
這應該做的工作。
wah華additional另外修改華wa華......被接受爲必然。 – Alex 2011-04-03 16:22:41
這幾乎沒有任何修改 – 2011-04-04 03:32:56
這是一個基本的修改,因爲它*強制*你寫入文件,防止使用腳本與* shell *重定向。 – MestreLion 2016-03-03 12:36:10
設置環境變量PYTHONIOENCODING
在將python腳本重定向到文件之前將其設置爲所需的編碼。那麼你將不必修改原始腳本。請務必寫Unicode字符串,否則PYTHONIOENCODING
將不起作用。如果您編寫字節字符串,則字節將按原樣發送到終端(或重定向文件)。
運行'PYTHONENCODING = utf8 script.py'完全不適用於我。我在其他地方看到的PYTHONSTDENCODING都沒有。也許我做錯了。 – qwertyboy 2013-11-26 12:33:43
@qwertyboy,你做錯了。這些拼寫都不是我答案中的拼寫。 – 2013-11-26 15:51:48
當然你是對的。對不起,(這是一個很晚的時候),謝謝。但最終我也嘗試了你的拼寫,這裏是我的終端拷貝:'PYTHONIOENCODING = utf-8 ./quote.py> log.txt',它不起作用。文件命令輸出'log.txt:非ISO擴展ASCII文本' – qwertyboy 2013-11-27 11:49:31
在Linux下,可以使用tee並將stderr重定向到/ dev/null。
python script.py 2>/dev/null | tee filename.txt
你也不需要修改你的Python腳本。
[在Python中管道標準輸出時設置正確的編碼](http://stackoverflow.com/questions/492483/setting-the-correct-encoding-when-piping-stdout-in-python) – techraf 2016-01-10 23:13:52