2010-11-15 11 views
20

Di seguito si riporta il programma di test, tra cui un carattere cinese:python: json.dumps non può gestire utf-8?

# -*- coding: utf-8 -*- 
import json 

j = {"d":"中", "e":"a"} 
json = json.dumps(j, encoding="utf-8") 

print json 

seguenti è il risultato, guardano i json.dumps convertono l'UTF-8 per i numeri originali!

{"e": "a", "d": "\u4e2d"} 

Perché questo è rotto? O qualsiasi cosa mi sbaglio?

+8

prima di tutto: il nome del tuo __don't var json__ non sarà in grado di accedere a JSON lib più dopo che, in secondo luogo, nulla è rotto, oltre alla codifica json predefinita è utf-8, quindi non è necessario aggiungerlo in dump() args. – mouad

+0

se posso accettarlo per trasformare i dati binari utf-8 in "\ u4e2d", come posso convertirlo in binario utf-8 in javascript, che è il client che riceve questi dati? –

+0

hai provato?, Voglio dire mandalo così al browser, penso che se stai usando una sofisticata javascript lib saprà cosa farne. – mouad

risposta

27

È necessario leggere json.org. La specifica JSON completa si trova nella casella bianca a destra.

Non c'è niente di sbagliato con il JSON generato. I generatori sono autorizzati a generare stringhe UTF-8 o stringhe ASCII normali, in cui i caratteri sono sfuggiti con la notazione \uXXXX. Nel tuo caso, il modulo Python json ha deciso di eseguire l'escape e ha la notazione escape \u4e2d.

A proposito: qualsiasi interprete JSON conforme riesaminerà correttamente questa sequenza e restituirà il carattere effettivo.

58

Sembra un JSON valido per me. Se si desidera che json emetta una stringa che contiene caratteri non ASCII, è necessario passare ensure_ascii=False e quindi eseguire la codifica manuale in un secondo momento.

+2

Questa è la risposta che mi ha aiutato !! – borrrden

+1

Documentazione: http://docs.python.org/2/library/json.html#basic-usage –

5

Utilizzare simplejson con le opzioni indicate:

# -*- coding: utf-8 -*- 
import simplejson as json 

j = {"d":"中", "e":"a"} 
json = json.dumps(j, ensure_ascii=False, encoding="utf-8") 

print json 

Outs:

{"e": "a", "d": "中"} 
Problemi correlati