2012-07-06 17 views
18

Trong ví dụ Minimalistic sau:Ai đó có thể làm rõ mã hóa unicode của Gson không?

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

Các dấu nháy đơn được thay thế bởi nó đại diện unicode trong bản in. Tuy nhiên, Chuỗi được trả lại từ phương thức toJson theo nghĩa đen có các ký tự '\', 'u', '0', '0', '2', '7'.

Giải mã bằng json thực sự hoạt động và cung cấp chuỗi "Apostrophe: '" thay cho "Apostrophe: \ u0027". Làm thế nào tôi nên giải mã nó để có được kết quả tương tự?

Và một câu hỏi khác, tại sao một ký tự unicode ngẫu nhiên chẳng hạn như ش được mã hóa tương tự?

Trả lời

35

Theo mặc định, gson Unicode thoát các ký tự nhất định, trong đó ' là một. (Xem HTML_SAFE_REPLACEMENT_CHARS trong JsonWriter cho danh sách đầy đủ.)

Để vô hiệu hóa này, làm

builder.disableHtmlEscaping(); 
+0

Cảm ơn! Ngoài ra, chỉ cần thấy rằng JsonReader giải mã các ký tự như vậy bằng cách sử dụng 'JsonReader.readEscapeCharacter()', thực sự trông khá phức tạp. Cảm ơn rất nhiều! – Miquel

0

Sử dụng đoạn mã sau để mã hóa

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

này giải quyết vấn đề của tôi.

Các vấn đề liên quan