teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

追記2をもう少し詳しく記載。

2019/12/07 15:15

投稿

Umeeeh
Umeeeh

スコア1493

answer CHANGED
@@ -8,12 +8,42 @@
8
8
 
9
9
  apache の設定で次を追加すると うまくいくかもしれません。
10
10
 
11
- ```apache2.conf
12
- # 環境変数LANGをShellから引き継ぐ
13
- PassEnv LANG
11
+ envvars LANGを設定
14
12
 
13
+ ```/etc/apache2/envvars
14
+ unset HOME
15
+ if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then
16
+ SUFFIX="-${APACHE_CONFDIR##/etc/apache2-}"
17
+ else
18
+ SUFFIX=
19
+ fi
20
+ export APACHE_RUN_USER=www-data
21
+ export APACHE_RUN_GROUP=www-data
22
+ export APACHE_PID_FILE=/var/run/apache2$SUFFIX/apache2.pid
23
+ export APACHE_RUN_DIR=/var/run/apache2$SUFFIX
24
+ export APACHE_LOCK_DIR=/var/lock/apache2$SUFFIX
25
+ export APACHE_LOG_DIR=/var/log/apache2$SUFFIX
26
+ export LANG=ja_JP.utf8 # ← 日本語UTF8を設定
27
+ export LANG
28
+
15
29
  ```
16
30
 
31
+ Apacheの設定に `PassEnv LANG` を追加
32
+
33
+
34
+ ```/etc/apache2/conf-enabled/cgi-bin.conf
35
+ ScriptAlias /cgi-bin/ /var/www/cgi-bin/
36
+ <Directory "/var/www/cgi-bin">
37
+ AllowOverride None
38
+ Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
39
+ Require all granted
40
+ AddHandler cgi-script .py
41
+ PassEnv LANG # ←envvars で設定したLANGをCGIに引き渡す
42
+ </Directory>
43
+ ```
44
+
45
+ サンプルコードを作成して cgi-bin に配置。
46
+
17
47
  ```python
18
48
  #!/usr/bin/env python
19
49
  import sys
@@ -26,10 +56,24 @@
26
56
  print "date : " + subprocess.check_output('date')
27
57
  ```
28
58
 
29
- 実行結果
59
+ 動作確認
30
60
 
31
61
  ```
62
+ # curl localhost/cgi-bin/hello.py
63
+ ```
64
+
65
+ passenv ありの場合
66
+
67
+ ```
32
68
  LANG : ja_JP.utf8
33
69
  sys.getfilesystemencoding: UTF-8 ← ロケールのエンコードが返ってきた
34
70
  date : 2019年 12月 2日 月曜日 15:06:22 UTC ←日本語ロケール
71
+ ```
72
+
73
+ passenv なしの場合
74
+
75
+ ```
76
+ LANG : None
77
+ sys.getfilesystemencoding: ANSI_X3.4-1968
78
+ date : Sun Dec 8 00:10:21 JST 2019
35
79
  ```

3

サンプルを追加

2019/12/07 15:15

投稿

Umeeeh
Umeeeh

スコア1493

answer CHANGED
@@ -12,4 +12,24 @@
12
12
  # 環境変数LANGをShellから引き継ぐ
13
13
  PassEnv LANG
14
14
 
15
+ ```
16
+
17
+ ```python
18
+ #!/usr/bin/env python
19
+ import sys
20
+ import os
21
+ import subprocess
22
+
23
+ print "Content-type: text/html\n\n"
24
+ print "LANG : " + str(os.environ.get('LANG'))
25
+ print "sys.getfilesystemencoding: " + sys.getfilesystemencoding()
26
+ print "date : " + subprocess.check_output('date')
27
+ ```
28
+
29
+ 実行結果
30
+
31
+ ```
32
+ LANG : ja_JP.utf8
33
+ sys.getfilesystemencoding: UTF-8 ← ロケールのエンコードが返ってきた
34
+ date : 2019年 12月 2日 月曜日 15:06:22 UTC ←日本語ロケール
15
35
  ```

2

追記2を追加。

2019/12/02 15:07

投稿

Umeeeh
Umeeeh

スコア1493

answer CHANGED
@@ -2,4 +2,14 @@
2
2
 
3
3
  (追記)
4
4
 
5
- apache の環境変数は、`/etc/apache2/envvars` ファイルで設定されてるのでこれを編集して apache2 を再起動してみてください。
5
+ apache の環境変数は、`/etc/apache2/envvars` ファイルで設定されてるのでこれを編集して apache2 を再起動してみてください。
6
+
7
+ (追記2)
8
+
9
+ apache の設定で次を追加すると うまくいくかもしれません。
10
+
11
+ ```apache2.conf
12
+ # 環境変数LANGをShellから引き継ぐ
13
+ PassEnv LANG
14
+
15
+ ```

1

別の回答を追記

2019/12/02 15:03

投稿

Umeeeh
Umeeeh

スコア1493

answer CHANGED
@@ -1,1 +1,5 @@
1
- あてずっぽうですが `raspi-config` で ロケールを設定して、再起動したら治りませんか?
1
+ あてずっぽうですが `raspi-config` で ロケールを設定して、再起動したら治りませんか?
2
+
3
+ (追記)
4
+
5
+ apache の環境変数は、`/etc/apache2/envvars` ファイルで設定されてるのでこれを編集して apache2 を再起動してみてください。