Edited at

Python3の標準入力でUnicodeDecodeErrorに出会ったときの対処法

More than 1 year has passed since last update.

sys.stdinUnicodeDecodeErrorに遭遇。

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xed in position XXXX: invalid continuation byte

対処に苦しんだので、対処法をここにメモします。


対処法

まず、Python3でUnicodeDecodeErrorに遭遇したときのTODOリストを参考にして、sys.stdinを次のように上書きします。1

:python3

sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8')

しかし、問題は解決しませんでした。そこでPythonの公式ドキュメントを確認。errorsという引数でエラーハンドリングの方法を指定できるので、これを使えば良さそうです。例えば、


python3

sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8', errors='replace')


errors'replace'を指定すれば、不正なデータを適当に置き換えてくれるようです。自分の場合はこれで解決しました。

'ignore'と指定すればエラーを無視できるようですが、これは最終手段でしょう。





  1. よくよく考えると、sys.stdinを上書きするのは危ない気がします。