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

質問編集履歴

5

解決

2019/04/24 05:13

投稿

JIN3X
JIN3X

スコア84

title CHANGED
File without changes
body CHANGED
@@ -123,4 +123,37 @@
123
123
  ファイルに{"text": "あ"}と出力したい。
124
124
  ```sample
125
125
  {"text": "\u3042"}
126
+ ```
127
+ #補足20190424 14:11
128
+ 解決しました。
129
+ ソースを何度も修正する際にミスが有ったようです。
130
+ 具体的には、同じコードを複数書いてexit()で実行されないようにしていたのですが、
131
+ ensure_ascii=Falseを追加する場所を間違えてました。
132
+ ずっとこの課題に取り組み、疲れが溜まっていたのが原因です。
133
+ 本当に解決してよかったです。しばらく休みます。
134
+
135
+ 下に最終的にうまく行ったコードを載せます。
136
+ ```python3
137
+ #!/usr/bin/env python3.6
138
+ # -*- coding: utf-8 -*-
139
+ import json
140
+ import cgi
141
+ import cgitb
142
+ import sys, io
143
+ cgitb.enable()
144
+
145
+ sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8')
146
+ sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
147
+ sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
148
+
149
+ print('Content-type: text/html; charset=UTF-8\r\n')
150
+
151
+ data = sys.stdin.buffer.read()
152
+ print(data)
153
+ params = json.loads(data.decode())
154
+ print(params)
155
+ with open("sample", mode="w", encoding="utf-8") as f:
156
+ json.dumps(params, f, indent=2, ensure_ascii=False)
157
+
158
+ exit()
126
159
  ```

4

誤字脱字

2019/04/24 05:13

投稿

JIN3X
JIN3X

スコア84

title CHANGED
File without changes
body CHANGED
@@ -110,7 +110,7 @@
110
110
  data = sys.stdin.buffer.read()
111
111
  print(data)
112
112
  params = json.loads(data)
113
- print(json)
113
+ print(params)
114
114
  with open("sample", mode="w", encode="utf-8") as f:
115
115
  json.dumps(params, f, indent=2, ensure_ascii=False)
116
116
 

3

補足2

2019/04/24 05:04

投稿

JIN3X
JIN3X

スコア84

title CHANGED
File without changes
body CHANGED
@@ -85,4 +85,42 @@
85
85
  LC_MEASUREMENT="ja_JP.UTF-8"
86
86
  LC_IDENTIFICATION="ja_JP.UTF-8"
87
87
  LC_ALL=
88
+ ```
89
+
90
+ #補足20190424 13:54
91
+ 皆様のおかげでjsonファイルにunicodeを出力するところまで行けました。
92
+ unicodeであれば読み込むときに変換ができるので、なんとか行けそうです。
93
+ ただ、ファイルにコードではなくちゃんと日本語で表記されるようにするにはどうすればよいでしょうか?
94
+ dumpsでensure_ascii=Falseにしても、どうしてもunicodeで出力されてしまいます。
95
+ ```python3
96
+ #!/usr/bin/env python3.6
97
+ # -*- coding: utf-8 -*-
98
+ import json
99
+ import cgi
100
+ import cgitb
101
+ import sys, io
102
+ cgitb.enable()
103
+
104
+ sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8')
105
+ sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
106
+ sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
107
+
108
+ print('Content-type: text/html; charset=UTF-8\r\n')
109
+
110
+ data = sys.stdin.buffer.read()
111
+ print(data)
112
+ params = json.loads(data)
113
+ print(json)
114
+ with open("sample", mode="w", encode="utf-8") as f:
115
+ json.dumps(params, f, indent=2, ensure_ascii=False)
116
+
117
+ exit()
118
+ ```
119
+ ```output
120
+ {"text": "\u3042"}
121
+ {"text": "あ"}
122
+ ```
123
+ ファイルに{"text": "あ"}と出力したい。
124
+ ```sample
125
+ {"text": "\u3042"}
88
126
  ```

2

補足

2019/04/24 05:03

投稿

JIN3X
JIN3X

スコア84

title CHANGED
File without changes
body CHANGED
@@ -63,4 +63,26 @@
63
63
  reason ='surrogates not allowed'
64
64
  start =9
65
65
  with_traceback =<built-in method with_traceback of UnicodeEncodeError object>
66
+ ```
67
+
68
+ #補足20190424 13:21
69
+ 環境面の補足です。
70
+ python3のデフォルトのencodingですが、環境で実行した場合とcgiから実行した場合で値がことなりました。サーバーでインタプリタで実行した際は「UTF-8」でしたが、
71
+ cgiから実行した場合は、stdin/stdoutともに、「ANSI_X3.4-1968」でした。
72
+ ```Bash
73
+ $ locale
74
+ LANG=ja_JP.UTF-8
75
+ LC_CTYPE="ja_JP.UTF-8"
76
+ LC_NUMERIC="ja_JP.UTF-8"
77
+ LC_TIME="ja_JP.UTF-8"
78
+ LC_COLLATE="ja_JP.UTF-8"
79
+ LC_MONETARY="ja_JP.UTF-8"
80
+ LC_MESSAGES="ja_JP.UTF-8"
81
+ LC_PAPER="ja_JP.UTF-8"
82
+ LC_NAME="ja_JP.UTF-8"
83
+ LC_ADDRESS="ja_JP.UTF-8"
84
+ LC_TELEPHONE="ja_JP.UTF-8"
85
+ LC_MEASUREMENT="ja_JP.UTF-8"
86
+ LC_IDENTIFICATION="ja_JP.UTF-8"
87
+ LC_ALL=
66
88
  ```

1

誤字脱字

2019/04/24 04:28

投稿

JIN3X
JIN3X

スコア84

title CHANGED
File without changes
body CHANGED
@@ -4,6 +4,7 @@
4
4
  どうしても、方法がわからなくて困ってます。
5
5
  ご教授いただければ幸いです。
6
6
 
7
+ ※ 下記にソースを簡単に再現しました。
7
8
  #クライアント
8
9
  ```html
9
10
  <html lang="ja">
@@ -28,6 +29,7 @@
28
29
  import json
29
30
  import cgi
30
31
  import cgitb
32
+ import sys, io
31
33
  cgitb.enable()
32
34
 
33
35
  print('Content-type: text/html; charset=UTF-8\r\n')