2017-01-13 16 views
0

私はこれに関連するいくつかの投稿を見ましたが、明確な答えはありません。文字列s=u'\xe9\xe1'を、ASCIIのみをサポートする端末(例えば、)に印刷したいとしましょう。でもゴミ - - というよりも例外を発生させる(UnicodeEncodeErrorを)すなわち、私が何かを印刷するための文字列にしたいPythonのデフォルトの文字エンコーディング処理

import sys 
s = u'\xe9\xe1' 
s = s.encode(sys.stdout.encoding, 'replace').decode(sys.stdout.encoding) 
print(s) 

:デフォルトの動作として、以下を設定するには、どのような方法があります。私はpython3.5を使用しています。

私はUTF-8を含む可能性のあるすべての文字列についてこれを書かないようにしたいと思います。

答えて

1

次の3つのいずれかを実行することができます

  • PYTHONIOENCODING environment variablestdoutstderrのためのエラーハンドラを調整します。

    export PYTHONIOENCODING=:replace 
    

    ノート:を。コーデックは指定せず、エラーハンドラのみを指定しました。

  • 異なるエラーハンドラを設定し、stdoutTextIOWrapperを交換:

    import sys 
    import io 
    
    sys.stdout = io.TextIOWrapper(
        sys.stdout.buffer, encoding=sys.stdout.encoding, 
        errors='replace', 
        line_buffering=sys.stdout.line_buffering) 
    
  • sys.stdout.buffer周り別TextIOWrapperインスタンスを作成し、印刷時file引数としてそれを渡す:

    import sys 
    import io 
    
    replacing_stdout = io.TextIOWrapper(
        sys.stdout.buffer, encoding=sys.stdout.encoding, 
        errors='replace', 
        line_buffering=sys.stdout.line_buffering) 
    
    print(s, file=replacing_stdout) 
    
+0

これはまさに私が探していたものです。 (私はオプション2に行った) – ws6079

関連する問題