回答編集履歴

4

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

2019/12/07 15:15

投稿

take88
take88

スコア1377

test CHANGED
@@ -18,15 +18,75 @@
18
18
 
19
19
 
20
20
 
21
- ```apache2.conf
21
+ envvars に LANGを設定
22
22
 
23
- # 環境変数LANGをShellから引き継ぐ
24
23
 
24
+
25
+ ```/etc/apache2/envvars
26
+
27
+ unset HOME
28
+
29
+ if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then
30
+
31
+ SUFFIX="-${APACHE_CONFDIR##/etc/apache2-}"
32
+
33
+ else
34
+
35
+ SUFFIX=
36
+
37
+ fi
38
+
39
+ export APACHE_RUN_USER=www-data
40
+
41
+ export APACHE_RUN_GROUP=www-data
42
+
43
+ export APACHE_PID_FILE=/var/run/apache2$SUFFIX/apache2.pid
44
+
45
+ export APACHE_RUN_DIR=/var/run/apache2$SUFFIX
46
+
47
+ export APACHE_LOCK_DIR=/var/lock/apache2$SUFFIX
48
+
49
+ export APACHE_LOG_DIR=/var/log/apache2$SUFFIX
50
+
51
+ export LANG=ja_JP.utf8 # ← 日本語UTF8を設定
52
+
25
- PassEnv LANG
53
+ export LANG
26
54
 
27
55
 
28
56
 
29
57
  ```
58
+
59
+
60
+
61
+ Apacheの設定に `PassEnv LANG` を追加
62
+
63
+
64
+
65
+
66
+
67
+ ```/etc/apache2/conf-enabled/cgi-bin.conf
68
+
69
+ ScriptAlias /cgi-bin/ /var/www/cgi-bin/
70
+
71
+ <Directory "/var/www/cgi-bin">
72
+
73
+ AllowOverride None
74
+
75
+ Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
76
+
77
+ Require all granted
78
+
79
+ AddHandler cgi-script .py
80
+
81
+ PassEnv LANG # ←envvars で設定したLANGをCGIに引き渡す
82
+
83
+ </Directory>
84
+
85
+ ```
86
+
87
+
88
+
89
+ サンプルコードを作成して cgi-bin に配置。
30
90
 
31
91
 
32
92
 
@@ -54,7 +114,19 @@
54
114
 
55
115
 
56
116
 
57
- 実行結果
117
+ 動作確認
118
+
119
+
120
+
121
+ ```
122
+
123
+ # curl localhost/cgi-bin/hello.py
124
+
125
+ ```
126
+
127
+
128
+
129
+ passenv ありの場合
58
130
 
59
131
 
60
132
 
@@ -67,3 +139,19 @@
67
139
  date : 2019年 12月 2日 月曜日 15:06:22 UTC ←日本語ロケール
68
140
 
69
141
  ```
142
+
143
+
144
+
145
+ passenv なしの場合
146
+
147
+
148
+
149
+ ```
150
+
151
+ LANG : None
152
+
153
+ sys.getfilesystemencoding: ANSI_X3.4-1968
154
+
155
+ date : Sun Dec 8 00:10:21 JST 2019
156
+
157
+ ```

3

サンプルを追加

2019/12/07 15:15

投稿

take88
take88

スコア1377

test CHANGED
@@ -27,3 +27,43 @@
27
27
 
28
28
 
29
29
  ```
30
+
31
+
32
+
33
+ ```python
34
+
35
+ #!/usr/bin/env python
36
+
37
+ import sys
38
+
39
+ import os
40
+
41
+ import subprocess
42
+
43
+
44
+
45
+ print "Content-type: text/html\n\n"
46
+
47
+ print "LANG : " + str(os.environ.get('LANG'))
48
+
49
+ print "sys.getfilesystemencoding: " + sys.getfilesystemencoding()
50
+
51
+ print "date : " + subprocess.check_output('date')
52
+
53
+ ```
54
+
55
+
56
+
57
+ 実行結果
58
+
59
+
60
+
61
+ ```
62
+
63
+ LANG : ja_JP.utf8
64
+
65
+ sys.getfilesystemencoding: UTF-8 ← ロケールのエンコードが返ってきた
66
+
67
+ date : 2019年 12月 2日 月曜日 15:06:22 UTC ←日本語ロケール
68
+
69
+ ```

2

追記2を追加。

2019/12/02 15:07

投稿

take88
take88

スコア1377

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

1

別の回答を追記

2019/12/02 15:03

投稿

take88
take88

スコア1377

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