Problème d'exécution du code Python pour lire les fichiers. Lors de l'exécution d'Apache avec mod_wsgi, cela fonctionnait normalement dans le terminal, mais lors de l'exécution avec Apache, j'ai rencontré ʻUnicodeDecodeError`. En conséquence, la définition des paramètres régionaux était un problème. J'y suis un peu accro, alors je vais le laisser comme un mémorandum. (Comme il fonctionne sur Apache d'Ubuntu, la structure des répertoires, etc. sera légèrement différente s'il s'agit d'un système 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)
De cette façon, comme «for line in fin», ce qui est souvent fait en Python, une erreur se produit simplement en essayant de lire un fichier dans lequel le japonais est écrit. Puisque l'erreur est ʻUnicodeDecodeError`, vous pouvez voir qu'il semble y avoir de la mousse autour du code de caractère.
Cela était dû aux paramètres Apache.
Le système est LANG =" en_US.UTF-8 "
, qui est appliqué lors du débogage dans le terminal.
Lors de l'exécution sur Apache, les paramètres de variable d'environnement décrits dans / etc / apache2 / envvars
sont appliqués.
Dans ce cas, ʻexport LANG = Ca été défini ici. Si vous alignez cela avec ce qui précède et définissez ʻexport LANG = "en_US.UTF-8"
, cela fonctionne (le commentaire dit que ʻexport LANG va à read
/ etc / default / locale`. Cela n'a pas bien fonctionné.)
Ce que j'ai vérifié --ʻImport sys; sys.getdefaultencoding () `vérifie si c'est utf-8
Recommended Posts