python の print でエラーになる時

2018年8月9日 python
このエントリーを Google ブックマーク に追加
LINEで送る

python での話.

コマンドラインで実行して,日本語が print で出力されるようなプログラムを書いていた.
その際はエラーは出ないのだが,crontab でそのスクリプトを実行すると,

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

のようなエラーが出ていた.
原因は漢字コードなのだが,crontab だと sys.stdout.encoding が US-ASCII になってしまって,print でエラーが出ていたのだ.

Python3でUnicodeDecodeErrorに遭遇したときのTODOリストを参考にさせてもらって解決.

import sys
import io

sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8')
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
このエントリーを Google ブックマーク に追加
LINEで送る

PageKnowHowBook
Pagetop