PythonでLANG=Cのときのエンコーディングの注意Zenntakaki💻PythonでLANG=Cのときのエンコーディングの注意2021/01/31に公開Python文字コードtechとあるPythonスクリプトを動かす環境のLANGがja_JP.UTF-8からCに変わったらエラーが出るようになったのでそのあたりの対処をメモ。tf.read()print(str)print(s)logger.debug(str)logger.debug(s)これをLANG=ja_JP.UTF-8で動かすのは大抵問題がない。これは大抵起動時にLANGを見て入出力のデフォルトエンコーディングを変更するようにPythonが設定されているからである。これをLANG=Cに持っていくとUTF-8をASCIIとして解釈しようとして例外を出すようになる。ファイルの読み込みにエンコーディングを指定する。出力先がUTF-8であると指定する。codecs.getwriter("utf8")(sys.stderr.detach())loggerはこのままでも動くがエスケープされた出力となってしまうので変更したsys.stderrを使うようにする。StreamHandler(sys.stderr)まとめるとこうなる。tf.read()print(str)print(s)logger.debug(str)logger.debug(s)参考http://stackoverflow.com/questions/4374455/how-to-set-sys-stdout-encoding-in-python-3GitHubで編集を提案takakihiバッジを贈って著者を応援しようバッジを受け取った著者にはZennから現金やAmazonギフトカードが還元されます。Proよくある質問LinksX(Twitter)GitHubメディアキットLegal利用規約プライバシーポリシ。