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

質問編集履歴

4

追記

2020/04/26 17:56

投稿

Y.NINOMIYA
Y.NINOMIYA

スコア32

title CHANGED
File without changes
body CHANGED
@@ -78,6 +78,7 @@
78
78
 
79
79
  **Python側で環境変数を操作する方法**
80
80
  `sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')`を挿入しました。
81
+ PHPは元のソースコードのままです。
81
82
  ```Python
82
83
  # -*- coding: utf-8 -*-
83
84
  import csv
@@ -97,6 +98,17 @@
97
98
  raise
98
99
  ```
99
100
  ---
101
+ **PHP側で環境変数を操作する方法**
102
+ `putenv("PYTHONIOENCODING=utf-8");`を挿入しました。
103
+ Pythonは元のソースコードのままです。上の**Python側で環境変数を操作する方法**のソースコードではありません。
104
+ ```PHP
105
+ <?php
106
+ putenv("PYTHONIOENCODING=utf-8");
107
+ $command="/usr/bin/python3 test.py";
108
+ exec($command,$output);
109
+ ?>
110
+ ```
111
+ ---
100
112
  **Apacheの実行ユーザを変更**
101
113
  `etc/apache2/apache2.conf`を編集し、Apacheの実行ユーザを`www-data`から'SSH実行ユーザ'へ変更しました。
102
114
  カレントディレクトリに出力されるエラーログの所有者が`www-data`から'SSH実行ユーザ'へ変更されていたので定義は正常に変更できたものと思われます。

3

追記及び訂正

2020/04/26 17:56

投稿

Y.NINOMIYA
Y.NINOMIYA

スコア32

title CHANGED
File without changes
body CHANGED
@@ -26,7 +26,7 @@
26
26
  f = open("日本語のファイル名000.csv", 'a',newline = "" ,encoding='utf-8')
27
27
  csvWriter = csv.writer(f)
28
28
  csvWriter.writerow(data)
29
- csvWriter.close(data)
29
+ f.close(data)
30
30
  except Exception as e:
31
31
  error_log = open('error.log', 'w')
32
32
  error_log.write(str(e))
@@ -71,4 +71,51 @@
71
71
  File "test.py", line 12, in <module>
72
72
  f = open("\u65e5\u672c\u8a9e\u306e\u30d5\u30a1\u30a4\u30eb\u540d000.csv", 'a',newline = "" ,encoding='utf-8')
73
73
  UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-8: ordinal not in range(128)
74
- ```
74
+ ```
75
+
76
+ ### 追記③
77
+ ※いずれもエラーは解消されませんでした
78
+
79
+ **Python側で環境変数を操作する方法**
80
+ `sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')`を挿入しました。
81
+ ```Python
82
+ # -*- coding: utf-8 -*-
83
+ import csv
84
+ import sys
85
+ import io
86
+ sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
87
+ data=["aaa", "bbb", "ccc"]
88
+ try:
89
+ f = open("日本語のファイル名000.csv", 'a',newline = "" ,encoding='utf-8')
90
+ csvWriter = csv.writer(f)
91
+ csvWriter.writerow(data)
92
+ f.close(data)
93
+ except Exception as e:
94
+ error_log = open('error.log', 'w')
95
+ error_log.write(str(e))
96
+ error_log.close()
97
+ raise
98
+ ```
99
+ ---
100
+ **Apacheの実行ユーザを変更**
101
+ `etc/apache2/apache2.conf`を編集し、Apacheの実行ユーザを`www-data`から'SSH実行ユーザ'へ変更しました。
102
+ カレントディレクトリに出力されるエラーログの所有者が`www-data`から'SSH実行ユーザ'へ変更されていたので定義は正常に変更できたものと思われます。
103
+
104
+ ---
105
+ **訂正**
106
+ 質問に直接的な影響は無いのですが、元のソースコードのCSVファイルを閉じる部分の**最終行**。
107
+ ```Python
108
+ f = open("日本語のファイル名000.csv", 'a',newline = "" ,encoding='utf-8')
109
+ csvWriter = csv.writer(f)
110
+ csvWriter.writerow(data)
111
+ csvWriter.close(data)
112
+ ```
113
+ とあったのですが、正しくは
114
+ ```Python
115
+ f = open("日本語のファイル名000.csv", 'a',newline = "" ,encoding='utf-8')
116
+ csvWriter = csv.writer(f)
117
+ csvWriter.writerow(data)
118
+ f.close(data) //この行を変更
119
+ ```
120
+ でした。エラー該当箇所が今回の訂正箇所より前にあるためプログラムが強制終了してしまい影響は無いのですが一応訂正です。
121
+ 本文ソースコードは既に訂正されています。

2

追記2

2020/04/26 17:53

投稿

Y.NINOMIYA
Y.NINOMIYA

スコア32

title CHANGED
File without changes
body CHANGED
@@ -52,4 +52,23 @@
52
52
 
53
53
  ```PHP
54
54
  $command="PYTHONIOENCODING=UTF-8 /usr/bin/python3 test.py"
55
+ ```
56
+
57
+ ### 追記②
58
+ index.phpを以下のように編集しましたが、依然同じエラーです。
59
+ ```PHP
60
+ $locale='ja_JP.UTF-8';
61
+ setlocale(LC_ALL,$locale);
62
+ putenv('LC_ALL='.$locale);
63
+
64
+ $command="/usr/bin/python3 test.py";
65
+ exec($command,$output);
66
+ ```
67
+
68
+ また、Apacheのエラーログに少し詳細な情報が記録されていました。
69
+ ```Error
70
+ Traceback (most recent call last):
71
+ File "test.py", line 12, in <module>
72
+ f = open("\u65e5\u672c\u8a9e\u306e\u30d5\u30a1\u30a4\u30eb\u540d000.csv", 'a',newline = "" ,encoding='utf-8')
73
+ UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-8: ordinal not in range(128)
55
74
  ```

1

追記

2020/04/26 16:13

投稿

Y.NINOMIYA
Y.NINOMIYA

スコア32

title CHANGED
File without changes
body CHANGED
@@ -41,4 +41,15 @@
41
41
  Ubuntu 18.04.4 LTS
42
42
  コードの編集はWinSCPから行っており、環境設定のデフォルト文字コードはUTRF-8に設定されています。
43
43
 
44
- よろしくお願いします。
44
+ よろしくお願いします。
45
+
46
+ ### 追記①
47
+ PHPのexec関数の引数を以下の2つで試してみましたがエラーは同じでした。
48
+
49
+ ```PHP
50
+ $command="LANG=ja_JP.UTF-8 /usr/bin/python3 test.py"
51
+ ```
52
+
53
+ ```PHP
54
+ $command="PYTHONIOENCODING=UTF-8 /usr/bin/python3 test.py"
55
+ ```