2013-12-18 6 views
6

私はそれにキリル文字を含むjsonを出力しようとしています。 しかし、たとえば、キリル文字Aの代わりにASCIIコードを取得します - \ u0410 そして、それを破るjsonエンコーダではありません。 ls変数自体を出力しようとすると、すでにASCII表現が表示されます。 これをさまざまな方法でエンコードとデコードしようとしましたが、最後は完全に混乱しました。ここdjangoのutf-8文字をjsonとして出力

コードである:ここ

def grades(request): 
grades = Grades.objects.all() 

Status = 0 
Message = 'No records' 
dataset = {} 
Response = {} 
Response['Type'] = 'class' 
Response['Data'] = {} 
x = '' 

if grades.exists() : 
    Status = 1 
    Message = 'Success' 
    ls = list() 
    for grade in grades: 
     dataitem = {} 
     dataitem['id'] = grade.id 
     dataitem['name'] = u'' + str(grade.grade) + grade.letter 
     #x = x + 
     ls.append(dataitem) 
    Response['Data'] = ls 

dataset['Status'] = Status 
dataset['Message'] = Message 
dataset['Response'] = Response 

return HttpResponse(json.dumps(dataset, ensure_ascii="False"), content_type="application/json; encoding=utf-8") 

が出力される。

{"Status": 1, "Message": "Success", "Response": 
{"Data": [{"id": 1, "name": "1\u0410"}, 
{"id": 2, "name": "1\u0411"}, 
{"id": 3, "name": "1\u0412"}, 
{"id": 4, "name": "2\u0410"}, 
{"id": 5, "name": "2\u0411"}, 
{"id": 6, "name": "2\u0412"}], "Type": "class"}} 

答えて

7

非空の文字列は、真の値として扱われます。

>>> bool("False") 
True 
>>> bool("") 
False 

>>> print(json.dumps(u'\u0411', ensure_ascii="False")) 
"\u0411" 
>>> print(json.dumps(u'\u0411', ensure_ascii=False)) 
"Б" 

Falseと次の行で"False"を交換してください。

return HttpResponse(json.dumps(dataset, ensure_ascii="False"), content_type="application/json; encoding=utf-8") 
#             ^^^^^^^ to False 
+0

ありがとう、たくさんの男! このような私の愚かな間違い。 –

関連する問題