有人可以澄清Gson的Unicode编码吗?

2022-09-01 04:28:19

在下面的简约示例中:

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 表示形式所取代。但是,从该方法返回的 String 实际上具有字符 “\”、“u”、“0”、“0”、“2”、“7”。toJson

使用json解码它实际上有效,并给出字符串“撇号:'”而不是“撇号:\u0027”。我应该如何解码它以获得相同的结果?

还有一个问题,为什么像ش这样的随机Unicode字符没有以类似的方式编码?


答案 1

默认情况下,gson Unicode 会转义某些字符,其中一个字符是其中之一。(有关完整列表,请参阅 JsonWriter 中的内容。'HTML_SAFE_REPLACEMENT_CHARS

要禁用此功能,请执行

builder.disableHtmlEscaping();

答案 2

您可以修改您的代码,如下所示

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

推荐