質問編集履歴

5

解決

2019/04/24 05:13

投稿

JIN3X
JIN3X

スコア84

test CHANGED
File without changes
test CHANGED
@@ -249,3 +249,69 @@
249
249
  {"text": "\u3042"}
250
250
 
251
251
  ```
252
+
253
+ #補足20190424 14:11
254
+
255
+ 解決しました。
256
+
257
+ ソースを何度も修正する際にミスが有ったようです。
258
+
259
+ 具体的には、同じコードを複数書いてexit()で実行されないようにしていたのですが、
260
+
261
+ ensure_ascii=Falseを追加する場所を間違えてました。
262
+
263
+ ずっとこの課題に取り組み、疲れが溜まっていたのが原因です。
264
+
265
+ 本当に解決してよかったです。しばらく休みます。
266
+
267
+
268
+
269
+ 下に最終的にうまく行ったコードを載せます。
270
+
271
+ ```python3
272
+
273
+ #!/usr/bin/env python3.6
274
+
275
+ # -*- coding: utf-8 -*-
276
+
277
+ import json
278
+
279
+ import cgi
280
+
281
+ import cgitb
282
+
283
+ import sys, io
284
+
285
+ cgitb.enable()
286
+
287
+
288
+
289
+ sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8')
290
+
291
+ sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
292
+
293
+ sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
294
+
295
+
296
+
297
+ print('Content-type: text/html; charset=UTF-8\r\n')
298
+
299
+
300
+
301
+ data = sys.stdin.buffer.read()
302
+
303
+ print(data)
304
+
305
+ params = json.loads(data.decode())
306
+
307
+ print(params)
308
+
309
+ with open("sample", mode="w", encoding="utf-8") as f:
310
+
311
+ json.dumps(params, f, indent=2, ensure_ascii=False)
312
+
313
+
314
+
315
+ exit()
316
+
317
+ ```

4

誤字脱字

2019/04/24 05:13

投稿

JIN3X
JIN3X

スコア84

test CHANGED
File without changes
test CHANGED
@@ -222,7 +222,7 @@
222
222
 
223
223
  params = json.loads(data)
224
224
 
225
- print(json)
225
+ print(params)
226
226
 
227
227
  with open("sample", mode="w", encode="utf-8") as f:
228
228
 

3

補足2

2019/04/24 05:04

投稿

JIN3X
JIN3X

スコア84

test CHANGED
File without changes
test CHANGED
@@ -173,3 +173,79 @@
173
173
  LC_ALL=
174
174
 
175
175
  ```
176
+
177
+
178
+
179
+ #補足20190424 13:54
180
+
181
+ 皆様のおかげでjsonファイルにunicodeを出力するところまで行けました。
182
+
183
+ unicodeであれば読み込むときに変換ができるので、なんとか行けそうです。
184
+
185
+ ただ、ファイルにコードではなくちゃんと日本語で表記されるようにするにはどうすればよいでしょうか?
186
+
187
+ dumpsでensure_ascii=Falseにしても、どうしてもunicodeで出力されてしまいます。
188
+
189
+ ```python3
190
+
191
+ #!/usr/bin/env python3.6
192
+
193
+ # -*- coding: utf-8 -*-
194
+
195
+ import json
196
+
197
+ import cgi
198
+
199
+ import cgitb
200
+
201
+ import sys, io
202
+
203
+ cgitb.enable()
204
+
205
+
206
+
207
+ sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8')
208
+
209
+ sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
210
+
211
+ sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
212
+
213
+
214
+
215
+ print('Content-type: text/html; charset=UTF-8\r\n')
216
+
217
+
218
+
219
+ data = sys.stdin.buffer.read()
220
+
221
+ print(data)
222
+
223
+ params = json.loads(data)
224
+
225
+ print(json)
226
+
227
+ with open("sample", mode="w", encode="utf-8") as f:
228
+
229
+ json.dumps(params, f, indent=2, ensure_ascii=False)
230
+
231
+
232
+
233
+ exit()
234
+
235
+ ```
236
+
237
+ ```output
238
+
239
+ {"text": "\u3042"}
240
+
241
+ {"text": "あ"}
242
+
243
+ ```
244
+
245
+ ファイルに{"text": "あ"}と出力したい。
246
+
247
+ ```sample
248
+
249
+ {"text": "\u3042"}
250
+
251
+ ```

2

補足

2019/04/24 05:03

投稿

JIN3X
JIN3X

スコア84

test CHANGED
File without changes
test CHANGED
@@ -129,3 +129,47 @@
129
129
  with_traceback =<built-in method with_traceback of UnicodeEncodeError object>
130
130
 
131
131
  ```
132
+
133
+
134
+
135
+ #補足20190424 13:21
136
+
137
+ 環境面の補足です。
138
+
139
+ python3のデフォルトのencodingですが、環境で実行した場合とcgiから実行した場合で値がことなりました。サーバーでインタプリタで実行した際は「UTF-8」でしたが、
140
+
141
+ cgiから実行した場合は、stdin/stdoutともに、「ANSI_X3.4-1968」でした。
142
+
143
+ ```Bash
144
+
145
+ $ locale
146
+
147
+ LANG=ja_JP.UTF-8
148
+
149
+ LC_CTYPE="ja_JP.UTF-8"
150
+
151
+ LC_NUMERIC="ja_JP.UTF-8"
152
+
153
+ LC_TIME="ja_JP.UTF-8"
154
+
155
+ LC_COLLATE="ja_JP.UTF-8"
156
+
157
+ LC_MONETARY="ja_JP.UTF-8"
158
+
159
+ LC_MESSAGES="ja_JP.UTF-8"
160
+
161
+ LC_PAPER="ja_JP.UTF-8"
162
+
163
+ LC_NAME="ja_JP.UTF-8"
164
+
165
+ LC_ADDRESS="ja_JP.UTF-8"
166
+
167
+ LC_TELEPHONE="ja_JP.UTF-8"
168
+
169
+ LC_MEASUREMENT="ja_JP.UTF-8"
170
+
171
+ LC_IDENTIFICATION="ja_JP.UTF-8"
172
+
173
+ LC_ALL=
174
+
175
+ ```

1

誤字脱字

2019/04/24 04:28

投稿

JIN3X
JIN3X

スコア84

test CHANGED
File without changes
test CHANGED
@@ -9,6 +9,8 @@
9
9
  ご教授いただければ幸いです。
10
10
 
11
11
 
12
+
13
+ ※ 下記にソースを簡単に再現しました。
12
14
 
13
15
  #クライアント
14
16
 
@@ -57,6 +59,8 @@
57
59
  import cgi
58
60
 
59
61
  import cgitb
62
+
63
+ import sys, io
60
64
 
61
65
  cgitb.enable()
62
66