2012-07-06 20 views
18

En el siguiente ejemplo minimalista:¿Alguien puede aclarar la codificación Unicode de 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" 
    } 
} 

El apóstrofe es reemplazado por él es la representación Unicode en la impresión. Sin embargo, la cadena devuelta desde el método toJson literalmente tiene los caracteres '\', 'u', '0', '0', '2', '7'.

La decodificación con json realmente funciona y le da a la cadena "Apostrophe: '" en lugar de "Apostrophe: \ u0027". ¿Cómo debo decodificarlo para obtener el mismo resultado?

Y una pregunta adicional, ¿por qué un carácter unicode aleatorio como ش no se codifica de manera similar?

Respuesta

35

Por defecto, gson Unicode escapa de ciertos caracteres, de los cuales ' es uno. (Ver HTML_SAFE_REPLACEMENT_CHARS en JsonWriter para la lista completa.)

Para desactivar esto, ¿

builder.disableHtmlEscaping(); 
+0

Gracias! Además, acabo de ver que JsonReader decodifica dichos caracteres utilizando 'JsonReader.readEscapeCharacter()', que en realidad parece bastante complicado. ¡Muchas gracias! – Miquel

0

utilizar el siguiente código para codificar

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

Esto resolvió mi problema.

Cuestiones relacionadas