2016-10-01 4 views
3

にstdoutに私はこのような 'xxx.py' という名前のファイルがあります:出力ASCII文字のPython 3

print("a simple string") 

とするとき、私はこの(Pythonの3)のようなことを実行します。

python xxx.py >atextfile.txt 

を私はユニコードファイルを取得します。

私はアスキーファイルが好きです。

ASCII以外の文字を印刷しようとすると例外がスローされても構いません。

ascii文字を出力する私のコードに行うことができる簡単な変更は何ですか?

私の検索では、このような単純な問題に対してすべてが冗長すぎるように見える解決策が導かれます。

私はLC_CTYPEの設定から学んだことを報告するために、[編集]:

私はPowerShellのコマンドラインで実行しているとき、私はUnicodeファイル(2つのバイト/文字)をウィンドウズ7

  1. 上で実行しています
  2. LC_CTYPEを設定せずに.batファイルで実行すると、asciiファイル(@jwodderが指摘するようにutf-8になる可能性があります)が表示されます。
  3. LC_CTYPE = asciiを設定した.batファイルで実行すると、私はアスキーファイル(1バイト/文字)を推測できます。
+1

'printf()はどのように定義されていますか?標準のエンコーディングは 'xxx.py'を実行したシェルのロケールで定義されている可能性があります。 'LC_TYPE = en_us python xxx.py> atextfile.txt'を試してみてください。 'sys.stdout.encoding'の値を確認してください – AChampion

+0

すべてのASCIIファイルはUnicode(特にUTF-8)ファイルです。正確に 'atextfile.txt'についてあなたは変更しようとしていますか?それはUTF-16のような非ASCII互換のUnicodeエンコーディングの1つですか? – jwodder

+0

'print(sys.stdout)'とは何ですか? 'print(open( 'atextfile.txt'、 'rb')。read())'とは何ですか? 'print(locale.getpreferredencoding())とは何ですか? utf-16文字コード「unicode file」を使用してエンコードされたテキストを含むファイルを呼び出さないでください。 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のエンコーディング値を強制することができます。