質問編集履歴

4

とりあえず原因が分かったので削除しました。

2018/11/26 04:41

投稿

kiwibird
kiwibird

スコア105

test CHANGED
File without changes
test CHANGED
@@ -1,397 +1,3 @@
1
- # **追記その2**
2
-
3
-
4
-
5
- **gh640**さんが仰っていたコマンドを実行しました!ありがとうございます!
6
-
7
- **centOSのPython**と**Djangoのインタラクティブシェル**の実行結果です。
8
-
9
-
10
-
11
- ## CentOS上のPython3.6.5
12
-
13
-
14
-
15
- ### CASE **A**
16
-
17
-
18
-
19
- ```python
20
-
21
- >>> import os, sys, json
22
-
23
- >>> path = 'media/movies'
24
-
25
- >>> result = os.listdir(path)
26
-
27
- >>> print(result)
28
-
29
- ['テスト1', 'test1.mp4', 'test2.mp4', 'テスト2', 'テスト4', 'テスト3']
30
-
31
- >>> print(json.dumps(result, ensure_ascii=False))
32
-
33
- ["テスト1", "test1.mp4", "test2.mp4", "テスト2", "テスト4", "テスト3"]
34
-
35
- ```
36
-
37
-
38
-
39
- ### CASE **B**
40
-
41
-
42
-
43
- ```python
44
-
45
- >>> import os, sys, json
46
-
47
- >>> result = os.listdir(b'media/movies')
48
-
49
- >>> entries = [e.decode(sys.getfilesystemencoding()) for e in result]
50
-
51
- >>> print(entries)
52
-
53
- ['テスト1', 'test1.mp4', 'test2.mp4', 'テスト2', 'テスト4', 'テスト3']
54
-
55
- >>> print(json.dumps(result, ensure_ascii=False))
56
-
57
- Traceback (most recent call last):
58
-
59
- File "<stdin>", line 1, in <module>
60
-
61
- File "/usr/lib64/python3.6/json/__init__.py", line 238, in dumps
62
-
63
- **kw).encode(obj)
64
-
65
- File "/usr/lib64/python3.6/json/encoder.py", line 199, in encode
66
-
67
- chunks = self.iterencode(o, _one_shot=True)
68
-
69
- File "/usr/lib64/python3.6/json/encoder.py", line 257, in iterencode
70
-
71
- return _iterencode(o, 0)
72
-
73
- File "/usr/lib64/python3.6/json/encoder.py", line 180, in default
74
-
75
- o.__class__.__name__)
76
-
77
- TypeError: Object of type 'bytes' is not JSON serializable
78
-
79
- ```
80
-
81
-
82
-
83
- ## django上のPython(`py manage.py shell`)
84
-
85
-
86
-
87
- ### CASE **A**
88
-
89
-
90
-
91
- ```python
92
-
93
- >>> import os, sys, json
94
-
95
- >>> path = 'media/movies'
96
-
97
- >>> result = os.listdir(path)
98
-
99
- >>> print(result)
100
-
101
- ['テスト1', 'test1.mp4', 'test2.mp4', 'テスト2', 'テスト4', 'テスト3']
102
-
103
- >>> print(json.dumps(result, ensure_ascii=False))
104
-
105
- ["テスト1", "test1.mp4", "test2.mp4", "テスト2", "テスト4", "テスト3"]
106
-
107
- ```
108
-
109
-
110
-
111
- ### CASE **B**
112
-
113
-
114
-
115
- ```python
116
-
117
- >>> import os, sys, json
118
-
119
- >>> result = os.listdir(b'media/movies')
120
-
121
- >>> entries = [e.decode(sys.getfilesystemencoding()) for e in result]
122
-
123
- >>> print(entries)
124
-
125
- ['テスト1', 'test1.mp4', 'test2.mp4', 'テスト2', 'テスト4', 'テスト3']
126
-
127
- >>> print(json.dumps(result, ensure_ascii=False))
128
-
129
- Traceback (most recent call last):
130
-
131
- File "<console>", line 1, in <module>
132
-
133
- File "/usr/lib64/python3.6/json/__init__.py", line 238, in dumps
134
-
135
- **kw).encode(obj)
136
-
137
- File "/usr/lib64/python3.6/json/encoder.py", line 199, in encode
138
-
139
- chunks = self.iterencode(o, _one_shot=True)
140
-
141
- File "/usr/lib64/python3.6/json/encoder.py", line 257, in iterencode
142
-
143
- return _iterencode(o, 0)
144
-
145
- File "/usr/lib64/python3.6/json/encoder.py", line 180, in default
146
-
147
- o.__class__.__name__)
148
-
149
- TypeError: Object of type 'bytes' is not JSON serializable
150
-
151
- ```
152
-
153
-
154
-
155
- 以上になります!通常の`shell`と`django上のshell`にて実行しましたが、**同じ結果**となりました。
156
-
157
- ついでに試しにやってみたんですが、`os.listdir('media/movies')`の結果を一つずつ`encode()`してから`deocde()`した結果も貼っておきます。
158
-
159
-
160
-
161
- ### os上のpython3.6.5
162
-
163
-
164
-
165
- ```python
166
-
167
- >>> import os, sys, json
168
-
169
- >>> result = os.listdir('media/movies')
170
-
171
- >>> json.dumps([i.encode('utf-8').decode('utf-8') for i in result])
172
-
173
- '["\u30c6\u30b9\u30c81", "test1.mp4", "test2.mp4", "\u30c6\u30b9\u30c82", "\u30c6\u30b9\u30c84", "\u30c6\u30b9\u30c83"]'
174
-
175
- ```
176
-
177
-
178
-
179
- ### django(py manage.py shell)
180
-
181
-
182
-
183
- ```python
184
-
185
- >>> import os, sys, json
186
-
187
- >>> result = os.listdir('media/movies')
188
-
189
- >>> json.dumps([i.encode('utf-8').decode('utf-8') for i in result])
190
-
191
- '["\u30c6\u30b9\u30c81", "test1.mp4", "test2.mp4", "\u30c6\u30b9\u30c82", "\u30c6\u30b9\u30c84", "\u30c6\u30b9\u30c83"]'
192
-
193
- ```
194
-
195
-
196
-
197
- ###### シェルだと普通にエンコード出来てるのに、なぜdjnagoだとサロゲートペアが云々...
198
-
199
-
200
-
201
- # **追記**
202
-
203
-
204
-
205
- 皆様、親切なご回答有り難うございます!ご指摘の通りにCentOS7の`locale`や`LANG`を確認してみました。
206
-
207
- また、localeが対応している文字コードについても記載しておきます。
208
-
209
-
210
-
211
- ```bash
212
-
213
- [kiwi@118-27-32-60 ~/app/archer]$ locale -a | grep ja
214
-
215
- ja_JP
216
-
217
- ja_JP.eucjp
218
-
219
- ja_JP.ujis
220
-
221
- ja_JP.utf8
222
-
223
- japanese
224
-
225
- japanese.euc
226
-
227
-
228
-
229
- [kiwi@118-27-32-60 ~/app/archer]$ locale -a | grep c.utf8
230
-
231
- [kiwi@118-27-32-60 ~/app/archer]$ locale -a | grep en_US.utf8
232
-
233
- en_US.utf8
234
-
235
- ```
236
-
237
-
238
-
239
- #### 環境変数 `LANG`
240
-
241
-
242
-
243
- ```bash
244
-
245
- [kiwi@118-27-32-60 ~]$ export | grep LANG
246
-
247
- declare -x LANG="ja_JP.utf8"
248
-
249
- ```
250
-
251
-
252
-
253
- #### `locale`コマンド
254
-
255
-
256
-
257
- ```bash
258
-
259
- [kiwi@118-27-32-60 ~]$ locale
260
-
261
- LANG=ja_JP.utf8
262
-
263
- LC_CTYPE="ja_JP.utf8"
264
-
265
- LC_NUMERIC="ja_JP.utf8"
266
-
267
- LC_TIME="ja_JP.utf8"
268
-
269
- LC_COLLATE="ja_JP.utf8"
270
-
271
- LC_MONETARY="ja_JP.utf8"
272
-
273
- LC_MESSAGES="ja_JP.utf8"
274
-
275
- LC_PAPER="ja_JP.utf8"
276
-
277
- LC_NAME="ja_JP.utf8"
278
-
279
- LC_ADDRESS="ja_JP.utf8"
280
-
281
- LC_TELEPHONE="ja_JP.utf8"
282
-
283
- LC_MEASUREMENT="ja_JP.utf8"
284
-
285
- LC_IDENTIFICATION="ja_JP.utf8"
286
-
287
- LC_ALL=
288
-
289
- ```
290
-
291
-
292
-
293
- となりました。ご指摘の通り、`c.utf8`や`en_US.utf8`に修正して`reboot`してみたりしましたが、サーバーが英語になるだけで相変わらず文字化けしていました...。
294
-
295
-
296
-
297
- #### `localectl`コマンド
298
-
299
-
300
-
301
- ```bash
302
-
303
- [kiwi@118-27-32-60 ~]$ localectl status
304
-
305
- System Locale: LANG=ja_JP.utf8
306
-
307
- VC Keymap: jp
308
-
309
- X11 Layout: jp
310
-
311
- ```
312
-
313
-
314
-
315
- また、**gh640**さんのご指摘に乗っ取り、`HttpResponse(json.dumps())`でレスポンスしてみましたが、`500`エラーが返ってきます(涙
316
-
317
-
318
-
319
- ```python
320
-
321
- result = os.listdir(path)
322
-
323
- return HttpResponse(json.dumps(result, ensure_ascii=False))
324
-
325
-
326
-
327
- >>>
328
-
329
- UnicodeEncodeError at /api/get_list
330
-
331
- 'utf-8' codec can't encode characters in position 2-10: surrogates not allowed
332
-
333
-
334
-
335
- Server time: 驥�, 23 11譛� 2018 19:41:05 +0900
336
-
337
-
338
-
339
- Exception Type: UnicodeEncodeError at /api/get_list
340
-
341
- Exception Value: 'utf-8' codec can't encode characters in position 2-10: surrogates not allowed
342
-
343
-
344
-
345
- wsgi.errors = <_io.TextIOWrapper name='<wsgi.errors>' encoding='utf-8'>
346
-
347
-
348
-
349
- Settings:
350
-
351
- DEFAULT_CHARSET = 'utf-8'
352
-
353
- DEFAULT_CONTENT_TYPE = 'text/html'
354
-
355
-
356
-
357
- LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmテ・l'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
358
-
359
- LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
360
-
361
- LANGUAGE_CODE = 'ja'
362
-
363
- LANGUAGE_COOKIE_AGE = None
364
-
365
- LANGUAGE_COOKIE_DOMAIN = None
366
-
367
- LANGUAGE_COOKIE_NAME = 'django_language'
368
-
369
- LANGUAGE_COOKIE_PATH = '/'
370
-
371
- TIME_ZONE = 'Asia/Tokyo'
372
-
373
- USE_I18N = True
374
-
375
- USE_L10N = True
376
-
377
- USE_THOUSAND_SEPARATOR = False
378
-
379
- USE_TZ = True
380
-
381
-
382
-
383
- ```
384
-
385
-
386
-
387
- `'utf-8' codec can't encode characters in position 2-10: surrogates not allowed`とあるので、やはりサロゲートペア?の問題なのでしょうか?しかし、ただ`list`を返しているだけなのですが...ファイル名の文字コードがそもそもおかしいのかな、とも思い`nkf`コマンドで変換なども試してみましたが、**既にUTF-8**です...と返されて泣きました。
388
-
389
-
390
-
391
- ---
392
-
393
-
394
-
395
1
  ## 概要
396
2
 
397
3
 

3

追記その2を追加しました。centosのpythonシェルとdjangoのシェルでCASE A CASE Bをそれぞれ実行しました。

2018/11/26 04:41

投稿

kiwibird
kiwibird

スコア105

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,203 @@
1
+ # **追記その2**
2
+
3
+
4
+
5
+ **gh640**さんが仰っていたコマンドを実行しました!ありがとうございます!
6
+
7
+ **centOSのPython**と**Djangoのインタラクティブシェル**の実行結果です。
8
+
9
+
10
+
11
+ ## CentOS上のPython3.6.5
12
+
13
+
14
+
15
+ ### CASE **A**
16
+
17
+
18
+
19
+ ```python
20
+
21
+ >>> import os, sys, json
22
+
23
+ >>> path = 'media/movies'
24
+
25
+ >>> result = os.listdir(path)
26
+
27
+ >>> print(result)
28
+
29
+ ['テスト1', 'test1.mp4', 'test2.mp4', 'テスト2', 'テスト4', 'テスト3']
30
+
31
+ >>> print(json.dumps(result, ensure_ascii=False))
32
+
33
+ ["テスト1", "test1.mp4", "test2.mp4", "テスト2", "テスト4", "テスト3"]
34
+
35
+ ```
36
+
37
+
38
+
39
+ ### CASE **B**
40
+
41
+
42
+
43
+ ```python
44
+
45
+ >>> import os, sys, json
46
+
47
+ >>> result = os.listdir(b'media/movies')
48
+
49
+ >>> entries = [e.decode(sys.getfilesystemencoding()) for e in result]
50
+
51
+ >>> print(entries)
52
+
53
+ ['テスト1', 'test1.mp4', 'test2.mp4', 'テスト2', 'テスト4', 'テスト3']
54
+
55
+ >>> print(json.dumps(result, ensure_ascii=False))
56
+
57
+ Traceback (most recent call last):
58
+
59
+ File "<stdin>", line 1, in <module>
60
+
61
+ File "/usr/lib64/python3.6/json/__init__.py", line 238, in dumps
62
+
63
+ **kw).encode(obj)
64
+
65
+ File "/usr/lib64/python3.6/json/encoder.py", line 199, in encode
66
+
67
+ chunks = self.iterencode(o, _one_shot=True)
68
+
69
+ File "/usr/lib64/python3.6/json/encoder.py", line 257, in iterencode
70
+
71
+ return _iterencode(o, 0)
72
+
73
+ File "/usr/lib64/python3.6/json/encoder.py", line 180, in default
74
+
75
+ o.__class__.__name__)
76
+
77
+ TypeError: Object of type 'bytes' is not JSON serializable
78
+
79
+ ```
80
+
81
+
82
+
83
+ ## django上のPython(`py manage.py shell`)
84
+
85
+
86
+
87
+ ### CASE **A**
88
+
89
+
90
+
91
+ ```python
92
+
93
+ >>> import os, sys, json
94
+
95
+ >>> path = 'media/movies'
96
+
97
+ >>> result = os.listdir(path)
98
+
99
+ >>> print(result)
100
+
101
+ ['テスト1', 'test1.mp4', 'test2.mp4', 'テスト2', 'テスト4', 'テスト3']
102
+
103
+ >>> print(json.dumps(result, ensure_ascii=False))
104
+
105
+ ["テスト1", "test1.mp4", "test2.mp4", "テスト2", "テスト4", "テスト3"]
106
+
107
+ ```
108
+
109
+
110
+
111
+ ### CASE **B**
112
+
113
+
114
+
115
+ ```python
116
+
117
+ >>> import os, sys, json
118
+
119
+ >>> result = os.listdir(b'media/movies')
120
+
121
+ >>> entries = [e.decode(sys.getfilesystemencoding()) for e in result]
122
+
123
+ >>> print(entries)
124
+
125
+ ['テスト1', 'test1.mp4', 'test2.mp4', 'テスト2', 'テスト4', 'テスト3']
126
+
127
+ >>> print(json.dumps(result, ensure_ascii=False))
128
+
129
+ Traceback (most recent call last):
130
+
131
+ File "<console>", line 1, in <module>
132
+
133
+ File "/usr/lib64/python3.6/json/__init__.py", line 238, in dumps
134
+
135
+ **kw).encode(obj)
136
+
137
+ File "/usr/lib64/python3.6/json/encoder.py", line 199, in encode
138
+
139
+ chunks = self.iterencode(o, _one_shot=True)
140
+
141
+ File "/usr/lib64/python3.6/json/encoder.py", line 257, in iterencode
142
+
143
+ return _iterencode(o, 0)
144
+
145
+ File "/usr/lib64/python3.6/json/encoder.py", line 180, in default
146
+
147
+ o.__class__.__name__)
148
+
149
+ TypeError: Object of type 'bytes' is not JSON serializable
150
+
151
+ ```
152
+
153
+
154
+
155
+ 以上になります!通常の`shell`と`django上のshell`にて実行しましたが、**同じ結果**となりました。
156
+
157
+ ついでに試しにやってみたんですが、`os.listdir('media/movies')`の結果を一つずつ`encode()`してから`deocde()`した結果も貼っておきます。
158
+
159
+
160
+
161
+ ### os上のpython3.6.5
162
+
163
+
164
+
165
+ ```python
166
+
167
+ >>> import os, sys, json
168
+
169
+ >>> result = os.listdir('media/movies')
170
+
171
+ >>> json.dumps([i.encode('utf-8').decode('utf-8') for i in result])
172
+
173
+ '["\u30c6\u30b9\u30c81", "test1.mp4", "test2.mp4", "\u30c6\u30b9\u30c82", "\u30c6\u30b9\u30c84", "\u30c6\u30b9\u30c83"]'
174
+
175
+ ```
176
+
177
+
178
+
179
+ ### django(py manage.py shell)
180
+
181
+
182
+
183
+ ```python
184
+
185
+ >>> import os, sys, json
186
+
187
+ >>> result = os.listdir('media/movies')
188
+
189
+ >>> json.dumps([i.encode('utf-8').decode('utf-8') for i in result])
190
+
191
+ '["\u30c6\u30b9\u30c81", "test1.mp4", "test2.mp4", "\u30c6\u30b9\u30c82", "\u30c6\u30b9\u30c84", "\u30c6\u30b9\u30c83"]'
192
+
193
+ ```
194
+
195
+
196
+
197
+ ###### シェルだと普通にエンコード出来てるのに、なぜdjnagoだとサロゲートペアが云々...
198
+
199
+
200
+
1
201
  # **追記**
2
202
 
3
203
 
@@ -144,22 +344,6 @@
144
344
 
145
345
  wsgi.errors = <_io.TextIOWrapper name='<wsgi.errors>' encoding='utf-8'>
146
346
 
147
- wsgi.file_wrapper = ''
148
-
149
- wsgi.input = <mod_wsgi.Input object at 0x7f221e757c70>
150
-
151
- wsgi.input_terminated = True
152
-
153
- wsgi.multiprocess = True
154
-
155
- wsgi.multithread = True
156
-
157
- wsgi.run_once = False
158
-
159
- wsgi.url_scheme = 'https'
160
-
161
- wsgi.version = '(1, 0)'
162
-
163
347
 
164
348
 
165
349
  Settings:

2

修正漏れの追記

2018/11/23 16:37

投稿

kiwibird
kiwibird

スコア105

test CHANGED
File without changes
test CHANGED
@@ -90,7 +90,7 @@
90
90
 
91
91
 
92
92
 
93
- となりました。ご指摘の通り、`C.utf8`や`en_US.utf8`
93
+ となりました。ご指摘の通り、`c.utf8`や`en_US.utf8`に修正して`reboot`してみたりしましたが、サーバーが英語になるだけで相変わらず文字化けしていました...。
94
94
 
95
95
 
96
96
 

1

サーバー側の文字コードについての追記、追加で試したことを記載

2018/11/23 10:54

投稿

kiwibird
kiwibird

スコア105

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,217 @@
1
+ # **追記**
2
+
3
+
4
+
5
+ 皆様、親切なご回答有り難うございます!ご指摘の通りにCentOS7の`locale`や`LANG`を確認してみました。
6
+
7
+ また、localeが対応している文字コードについても記載しておきます。
8
+
9
+
10
+
11
+ ```bash
12
+
13
+ [kiwi@118-27-32-60 ~/app/archer]$ locale -a | grep ja
14
+
15
+ ja_JP
16
+
17
+ ja_JP.eucjp
18
+
19
+ ja_JP.ujis
20
+
21
+ ja_JP.utf8
22
+
23
+ japanese
24
+
25
+ japanese.euc
26
+
27
+
28
+
29
+ [kiwi@118-27-32-60 ~/app/archer]$ locale -a | grep c.utf8
30
+
31
+ [kiwi@118-27-32-60 ~/app/archer]$ locale -a | grep en_US.utf8
32
+
33
+ en_US.utf8
34
+
35
+ ```
36
+
37
+
38
+
39
+ #### 環境変数 `LANG`
40
+
41
+
42
+
43
+ ```bash
44
+
45
+ [kiwi@118-27-32-60 ~]$ export | grep LANG
46
+
47
+ declare -x LANG="ja_JP.utf8"
48
+
49
+ ```
50
+
51
+
52
+
53
+ #### `locale`コマンド
54
+
55
+
56
+
57
+ ```bash
58
+
59
+ [kiwi@118-27-32-60 ~]$ locale
60
+
61
+ LANG=ja_JP.utf8
62
+
63
+ LC_CTYPE="ja_JP.utf8"
64
+
65
+ LC_NUMERIC="ja_JP.utf8"
66
+
67
+ LC_TIME="ja_JP.utf8"
68
+
69
+ LC_COLLATE="ja_JP.utf8"
70
+
71
+ LC_MONETARY="ja_JP.utf8"
72
+
73
+ LC_MESSAGES="ja_JP.utf8"
74
+
75
+ LC_PAPER="ja_JP.utf8"
76
+
77
+ LC_NAME="ja_JP.utf8"
78
+
79
+ LC_ADDRESS="ja_JP.utf8"
80
+
81
+ LC_TELEPHONE="ja_JP.utf8"
82
+
83
+ LC_MEASUREMENT="ja_JP.utf8"
84
+
85
+ LC_IDENTIFICATION="ja_JP.utf8"
86
+
87
+ LC_ALL=
88
+
89
+ ```
90
+
91
+
92
+
93
+ となりました。ご指摘の通り、`C.utf8`や`en_US.utf8`
94
+
95
+
96
+
97
+ #### `localectl`コマンド
98
+
99
+
100
+
101
+ ```bash
102
+
103
+ [kiwi@118-27-32-60 ~]$ localectl status
104
+
105
+ System Locale: LANG=ja_JP.utf8
106
+
107
+ VC Keymap: jp
108
+
109
+ X11 Layout: jp
110
+
111
+ ```
112
+
113
+
114
+
115
+ また、**gh640**さんのご指摘に乗っ取り、`HttpResponse(json.dumps())`でレスポンスしてみましたが、`500`エラーが返ってきます(涙
116
+
117
+
118
+
119
+ ```python
120
+
121
+ result = os.listdir(path)
122
+
123
+ return HttpResponse(json.dumps(result, ensure_ascii=False))
124
+
125
+
126
+
127
+ >>>
128
+
129
+ UnicodeEncodeError at /api/get_list
130
+
131
+ 'utf-8' codec can't encode characters in position 2-10: surrogates not allowed
132
+
133
+
134
+
135
+ Server time: 驥�, 23 11譛� 2018 19:41:05 +0900
136
+
137
+
138
+
139
+ Exception Type: UnicodeEncodeError at /api/get_list
140
+
141
+ Exception Value: 'utf-8' codec can't encode characters in position 2-10: surrogates not allowed
142
+
143
+
144
+
145
+ wsgi.errors = <_io.TextIOWrapper name='<wsgi.errors>' encoding='utf-8'>
146
+
147
+ wsgi.file_wrapper = ''
148
+
149
+ wsgi.input = <mod_wsgi.Input object at 0x7f221e757c70>
150
+
151
+ wsgi.input_terminated = True
152
+
153
+ wsgi.multiprocess = True
154
+
155
+ wsgi.multithread = True
156
+
157
+ wsgi.run_once = False
158
+
159
+ wsgi.url_scheme = 'https'
160
+
161
+ wsgi.version = '(1, 0)'
162
+
163
+
164
+
165
+ Settings:
166
+
167
+ DEFAULT_CHARSET = 'utf-8'
168
+
169
+ DEFAULT_CONTENT_TYPE = 'text/html'
170
+
171
+
172
+
173
+ LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmテ・l'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
174
+
175
+ LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
176
+
177
+ LANGUAGE_CODE = 'ja'
178
+
179
+ LANGUAGE_COOKIE_AGE = None
180
+
181
+ LANGUAGE_COOKIE_DOMAIN = None
182
+
183
+ LANGUAGE_COOKIE_NAME = 'django_language'
184
+
185
+ LANGUAGE_COOKIE_PATH = '/'
186
+
187
+ TIME_ZONE = 'Asia/Tokyo'
188
+
189
+ USE_I18N = True
190
+
191
+ USE_L10N = True
192
+
193
+ USE_THOUSAND_SEPARATOR = False
194
+
195
+ USE_TZ = True
196
+
197
+
198
+
199
+ ```
200
+
201
+
202
+
203
+ `'utf-8' codec can't encode characters in position 2-10: surrogates not allowed`とあるので、やはりサロゲートペア?の問題なのでしょうか?しかし、ただ`list`を返しているだけなのですが...ファイル名の文字コードがそもそもおかしいのかな、とも思い`nkf`コマンドで変換なども試してみましたが、**既にUTF-8**です...と返されて泣きました。
204
+
205
+
206
+
207
+ ---
208
+
209
+
210
+
211
+ ## 概要
212
+
213
+
214
+
1
215
  POSTで指定したディレクトリ内のファイル一覧を返すAPIをDjangoで構築しています。
2
216
 
3
217
  どうも、日本語を含むとファイル名が全て文字化けしてしまうようです。