Qiitaからの移植です。
sys.stdin
でUnicodeDecodeError
に遭遇。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xed in position XXXX: invalid continuation byte
対処に苦しんだので、対処法をここにメモします。
対処法
まず、Python3でUnicodeDecodeErrorに遭遇したときのTODOリストを参考にして、sys.stdin
を次のように上書きします。1
sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8')
しかし、問題は解決しませんでした。そこでPythonの公式ドキュメントを確認。errors
という引数でエラーハンドリングの方法を指定できるので、これを使えば良さそうです。例えば、
sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8', errors='replace')
とerrors
に'replace'
を指定すれば、不正なデータを適当に置き換えてくれるようです。自分の場合はこれで解決しました。
'ignore'
と指定すればエラーを無視できるようですが、これは最終手段でしょう。
-
よくよく考えると、
sys.stdin
を上書きするのは危ない気がします。↩