38

在以下简约示例中:

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 解码它实际上可以工作,并给出字符串“撇号:'”而不是“撇号:\u0027”。我应该如何对其进行解码以获得相同的结果?

还有一个问题,为什么像 ش 这样的随机 unicode 字符没有得到类似的编码?

4

2 回答 2

62

默认情况下,gson Unicode 会转义某些字符,其中'之一。(有关完整列表,请参阅HTML_SAFE_REPLACEMENT_CHARSJsonWriter

要禁用此功能,请执行

builder.disableHtmlEscaping();
于 2012-07-06T11:27:18.793 回答
0

你可以修改你的代码如下

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class GsonStuff {

    public static void main(String[] args) {
        GsonBuilder builder = new GsonBuilder().disableHtmlEscaping();
        Gson gson = builder.create();
        System.out.println(gson.toJson("Apostrophe: '"));
        //Outputs: "Apostrophe: \u0027"
    }   
}
于 2021-08-30T13:00:40.013 回答