2012-07-06 3 views
18

Nell'esempio seguente minimalista:Qualcuno può chiarire la codifica Unicode di Gson?

import com.google.gson.Gson; 
import com.google.gson.GsonBuilder; 

public class GsonStuff { 

    public static void main(String[] args) { 
     GsonBuilder builder = new GsonBuilder(); 
     Gson gson = builder.create(); 
     System.out.println(gson.toJson("Apostrophe: '")); 
     //Outputs: "Apostrophe: \u0027" 
    } 
} 

L'apostrofo viene sostituito da esso è rappresentazione Unicode nella stampa. Tuttavia, la stringa restituita dal metodo toJson ha letteralmente caratteri '\', 'u', '0', '0', '2', '7'.

Decodificarlo con json in realtà funziona e fornisce la stringa "Apostrofo:" "al contrario di" Apostrofo: \ u0027 ". Come dovrei decodificarlo per ottenere lo stesso risultato?

E una domanda aggiuntiva, perché un carattere unicode casuale come ش viene codificato in modo simile?

risposta

35

Per impostazione predefinita, gson Unicode sfugge a determinati caratteri, di cui ' è uno. (Vedere HTML_SAFE_REPLACEMENT_CHARS nel JsonWriter per l'elenco completo).

per eliminare questa, fanno

builder.disableHtmlEscaping(); 
+0

Grazie! Inoltre, ho appena visto che JsonReader decodifica tali caratteri usando 'JsonReader.readEscapeCharacter()', che in realtà sembra abbastanza complicato. Molte grazie! – Miquel

0

utilizzare il seguente codice per codificare

response.setCharacterEncoding("UTF8"); // this line solves the problem 
response.setContentType("application/json"); 

Questo risolto il mio problema.