2012-07-06 29 views
18

W poniższym przykładzie minimalistycznej:Czy ktoś może wyjaśnić kodowanie Unicode Gsona?

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

Apostrof zostaje zastąpiony przez swojego Unicode reprezentacja na wydruku. Jednak ciąg zwrócony z metody toJson dosłownie ma znaki "\", "u", "0", "0", "2", "7".

Dekodowanie za pomocą jsona faktycznie działa i podaje ciąg "Apostrophe:" "w przeciwieństwie do" Apostrophe: \ u0027 ". Jak powinienem ją odkodować, aby uzyskać ten sam wynik?

I dodatkowe pytanie, dlaczego losowy kod Unicode, taki jak ش, nie zostanie zakodowany w podobny sposób?

Odpowiedz

35

Domyślnie gson Unicode wymyka się niektórym znakom, z których ' jest jednym. (Patrz HTML_SAFE_REPLACEMENT_CHARS w JsonWriter dla kompletnej listy.)

Aby to wyłączyć, wykonaj

builder.disableHtmlEscaping(); 
+0

Dzięki! Ponadto, widziałem, że JsonReader dekoduje takie znaki za pomocą 'JsonReader.readEscapeCharacter()', co w rzeczywistości wygląda dość skomplikowane. Wielkie dzięki! – Miquel

0

Użyj następującego kodu do zakodowania

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

to rozwiązać mój problem.

Powiązane problemy