6
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LANGやPYTHONIOENCODINGを設定してもUnicodeDecodeErrorが出る時の更なる確認ポイント

Posted at

はじめに

私はPythonを使い始めて10年以上経つのですが、未だにUnicodeDecodeError: 'ascii' codec can't decodeで1時間以上悩んでしまったので、その時のメモです。

直接の解決に至ったのは https://ota42y.com/blog/2015/06/03/linux_local/ のおかげでした。ありがとうございました。

Version

  • Dockerの公式コンテナの python:3.5.3
    • OS: Debian GNU/Linux 8
    • Python 3.5.3

UnicodeDecodeErrorが出た時の確認ポイント

症状

print(open("utf8.txt", "rt").read())

みたいなコードがあって、utf8.txtにはUTF8のマルチバイトな文字があるとします。

UnicodeDecodeError: 'ascii' codec can't decode...

というエラーが出ます。

  • 環境変数
    • LANG: ja_JP.UTF-8
    • PYTHONIOENCODING: utf-8

です。経験上、この設定にしておくとあまり問題がおきませんでした。
それでもエラーが出るので悩んでいました

確認ポイント

locale -a

を実行してみます。
Dockerの公式コンテナの python:3.5.3 では

C
C.UTF-8
POSIX

と表示されます。
そうです。ja_JP.UTF-8がないのです。
そこで、 LANG=C.UTF-8 として再実行するとちゃんとエラーもなく処理されました。

しかも、LANG=C.UTF-8 は Dockerの公式コンテナの python:3.5.3 ではデフォルトの設定なのでした。
つまり、余計な環境変数をセットしたことによってエラーを引き起こしていたというわけでした。。。

さいごに

雰囲気で環境変数をセットしてはいけないという悲しい例でした。

6
10
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?