2
0

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 3 years have passed since last update.

ubuntu20.04+apache+mod_wsgiで、日本語ファイル名がopenできなかった話

Posted at
  • ubuntu20.04
  • apache2
  • mod_wsgi (pip3 install mod_wsgiでインストール)

ローカルPCで、flaskを使った自作アプリケーションをapache+mod_wsgiで使っているのですが、ubuntuを20.04にしたら、例外が発生するようになってしまいました。

[Wed Apr 29 04:26:54.738674 2020] [wsgi:error] [pid 38764:tid 140083800012544] UnicodeEncodeError: 'ascii' codec can't encode characters in position 22-23: ordinal not in range(128)

発生しているのはopen関数を呼び出しているところで、対象は日本語ファイル名なので、おそらくそれが問題ではないかと推測。
試しにsys.getfilesystemencodingメソッドで確認してみると、確かに「ascii」が返ってきました。
しかし、ubuntu19.10までは動いていたので、以前は「utf-8」だったんだろうか。

さて、sys.getfilesystemencodingのマニュアルによれば、「ロケールのエンコーディング」に設定されるそうなので、通常であれば環境変数「LANG」辺りを設定すればいいんでしょうけど、今回の場合はどうすればいいんだろう…。

とりあえず、mod_wsgiのマニュアルを読んでみました。

どうやら「locale=locale」という設定項目があるらしいので(「lang=locale」もあるけど、どちらがいいのだろう)、それを設定してみました。

<VirtualHost *:80>
    WSGIDaemonProcess app locale=ja_JP.UTF-8
    WSGIScriptAlias /app /path/to/wsgi.py
    <Location /app>
        WSGIProcessGroup app
        Require all granted
    </Location>
</VirtualHost>

これで例外が発生しなくなりました。

2
0
0

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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?