BLOGサブスレッドの日常

2023.02.24

WSGI で起動している Pythonでマルチバイトを含む名前のファイルなどを作成しようすると UnicodeEncodeError が出てしまう問題

torikai

マルチバイトを含む名前のファイルやディレクトリを作成しようとした時、こんなエラーに遭遇したことはないでしょうか?

'ascii' codec can't encode charactersin position 64-66: ordinal not in range(128)

原因

このエラーが出てしまう原因ですが、WSGIDaemonProcesslocaleC がデフォルトとなっている為、ファイルシステムエンコーディングが ascii となるのが原因です。

ファイルシステムエンコーディングは、以下のようなコードを実行することで確認が可能です。

import sys
print(sys.getfilesystemencoding())

解決方法

WSGIDaemonProcesslocaleja_JP.UTF-8 を指定することで解決します。
(以下は Apache での記述)

WSGIDaemonProcess .... locale=ja_JP.UTF-8

未確認ですが、nginx でも同じハマり方をすることがあるかもしれません。
(その場合も、ロケールにまつわる設定を見直すことで解決するのかな、と思います)

今日のひとネタでした!

この記事を書いた人

torikai