Help us understand the problem. What is going on with this article?

mod_wsgiで動かす時に、UnicodeDecodeErrorが出てしまう

More than 1 year has passed since last update.

概要

ファイルを読み込むというPythonコードを動かす際のトラブル。
mod_wsgiでApacheから動作させる際に、ターミナルでは普通に動作していたが、Apacheで動作させるとUnicodeDecodeErrorに遭遇した。
結果的には、ロケールの設定が問題だった。
少しハマったので、備忘録として残す。
(UbuntuのApacheで動かしているためRHEL系だとディレクトリ構成などは若干異なると思います。)

エラー内容

[Thu Jul 06 10:50:28.381851 2017] [wsgi:error] [pid 6935] [hogehoge]     for line in fin:
[Thu Jul 06 10:50:28.381858 2017] [wsgi:error] [pid 6935] [hogehoge]   File "/usr/path/to/python/encodings/ascii.py", line 26, i
n decode
[Thu Jul 06 10:50:28.381862 2017] [wsgi:error] [pid 6935] [hogehoge]     return codecs.ascii_decode(input, self.errors)[0]
[Thu Jul 06 10:50:28.381882 2017] [wsgi:error] [pid 6935] [hogehoge] UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 0: ordinal not i
n range(128)

このように、Pythonでよくやるfor line in finとして、日本語が記述されたファイルを読み込もうとするだけで、エラーが発生する。
エラーは、UnicodeDecodeErrorなので文字コード周りでコケていそうということがわかる。

対策

Apacheの設定が原因だった。
システムはLANG="en_US.UTF-8"となっており、ターミナルでデバッグする際は、こちらが適用されている。
Apacheで動作させると、/etc/apache2/envvarsに記載されている環境変数の設定が適用される。
今回の場合は、ここでexport LANG=Cとなっていた。
これを上記のものと揃えてexport LANG="en_US.UTF-8"とすると動作する(コメントには、export LANG/etc/default/localeを読みに行くと書いているがうまく動作しなかった。)

その他

チェックしたこと
- import sys;sys.getdefaultencoding()でutf-8かどうか確認

kanjirz50
日本語処理、ベトナム語処理。
https://sites.google.com/view/takahashi-kanji/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした