2012-07-06 10 views
18

は、以下の最小限の例では:誰かが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" 
    } 
} 

アポストロフィは、プリントアウトで、それのUnicode表現に置き換えられます。ただし、toJsonメソッドから返される文字列には、文字 '¥'、 'u'、 '0'、 '0'、 '2'、 '7'が文字通りあります。

jsonでそれをデコードすると、実際には動作し、 "Apostrophe:\ u0027"ではなく、 "Apostrophe: '"という文字列が与えられます。同じ結果を得るためには、どのようにデコードする必要がありますか?

もう1つ質問すれば、なぜشのようなランダムなユニコード文字も同様にエンコードされないのですか?

答えて

35

デフォルトでは、gson Unicodeは特定の文字をエスケープします。そのうちの1つは'です。 (完全なリストについてはJsonWriterHTML_SAFE_REPLACEMENT_CHARSを参照してください。)

これを無効にするには、

builder.disableHtmlEscaping(); 
+0

ありがとうございます!また、JsonReaderが実際にかなり複雑に見える 'JsonReader.readEscapeCharacter()'を使ってそのような文字をデコードするのを見ただけです。どうもありがとう! – Miquel

0

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

をエンコードするために、次のコードを使用しないこれが私の問題を解決しました。

関連する問題