2013-12-18 3 views
6

Ich versuche, einige Json mit kyrillischen Zeichen in ihm auszugeben. Aber anstelle von kyrillischen A bekomme ich es als ASCII-Code - \ u0410 Und es ist nicht Json-Encoder, der das Zeug bricht. Wenn ich versuche, die ls-Variable selbst auszugeben, zeigt sie bereits ASCII-Darstellung. Versucht, es auf verschiedene Arten zu kodieren-decodieren, aber am Ende völlig verwirrt. HierAusgabe utf-8 Zeichen in Django als JSON

ist der Code:

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") 

Hier ist der Ausgang:

{"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"}} 

Antwort

7

Nicht leere Zeichenkette wird als wahre Wert behandelt.

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

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

"False" in der folgenden Zeile Ersetzen durch False.

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

Vielen Dank Mann! Solch ein dummer Fehler von mir. –

Verwandte Themen