2016-10-01 45 views
3

我有一個名爲 'xxx.py' 這樣的文件:輸出ASCII字符在Python標準輸出3

print("a simple string") 

,當我運行,像這樣(Python 3中):

python xxx.py >atextfile.txt 

我得到一個unicode文件。

我想要一個ascii文件。

我不介意在試圖打印非ASCII字符時是否拋出異常。

什麼是我可以對我的代碼輸出ascii字符的簡單更改?

我的搜索提出的解決方案對於這樣一個簡單的問題來說似乎都很冗長。

[編輯]彙報我從設置LC_CTYPE瞭解到:

我運行在Windows 7

  1. 當在PowerShell的命令行我得到一個Unicode文件運行(兩個字節/字符)
  2. 在沒有LC_CTYPE設置的.bat文件中運行時,我得到一個ascii文件(可能是@jwodder指出的utf-8)。
  3. 當在一個LC_CTYPE = ascii設置的.bat文件中運行時,我得到一個ascii文件(1字節/字符)。
+1

如何定義'printf()'?標準編碼很可能由執行'xxx.py'的shell的locale定義。你可以嘗試'LC_TYPE = en_us python xxx.py> atextfile.txt'。檢查'sys.stdout.encoding'的值 – AChampion

+0

所有ASCII文件都是Unicode(特別是UTF-8)文件。 「atextfile.txt」究竟是你想改變的嗎?它是否採用非ASCII兼容Unicode編碼之一,如UTF-16? – jwodder

+0

什麼是'print(sys.stdout)'?什麼是'print(open('atextfile.txt','rb')。read())'?什麼是'print(locale.getpreferredencoding())'?請不要調用帶有使用utf-16字符編碼「unicode文件」編碼的文本的文件。 Unicode字符串在Python中沒有關聯的字符編碼 - 您可以使用多種編碼將相同的Unicode字符串編碼爲字節。磁盤上的文件是一個字節流,有時可以將其解釋爲文本,並給出適當的字符編碼。 – jfs

回答

0

stdout編碼由被執行python腳本環境,例如:

$ python -c "import sys; print(sys.stdout.encoding)" 
UTF-8 
$ LC_CTYPE=ascii python -c "import sys; print(sys.stdout.encoding)" 
US-ASCII 

嘗試運行腳本之前調整您的環境中定義。您可以通過設置PYTHONIOENCODING環境變量來強制使用Python的編碼值。

相關問題