2012-07-06 51 views
18

在下面的簡約例如:有人可以澄清Gson的unicode編碼嗎?

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

撇號被它所取代的打印輸出Unicode表示。但是,從toJson方法返回的字符串字面上具有字符'\','u','0','0','2','7'。

使用json對其進行解碼實際上工作並給出字符串「Apostrophe:」,而不是「Apostrophe:\ u0027」。我應該如何解碼才能得到相同的結果?

還有一個問題,爲什麼沒有隨機的unicode字符,比如Ô獲得相似的編碼?

回答

35

默認情況下,gson Unicode轉義某些字符,其中'是一個字符。 (有關完整列表,請參閱JsonWriterHTML_SAFE_REPLACEMENT_CHARS。)

要禁用它,做

builder.disableHtmlEscaping(); 
+0

謝謝!此外,只是看到JsonReader使用'JsonReader.readEscapeCharacter()'解碼這些字符,實際上看起來相當複雜。非常感謝! – Miquel 2012-07-06 12:13:52

0

使用下面的代碼編碼

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

這解決了我的問題。