Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 防止Gson转义Unicode符号_Java_Unicode_Gson - Fatal编程技术网

Java 防止Gson转义Unicode符号

Java 防止Gson转义Unicode符号,java,unicode,gson,Java,Unicode,Gson,我有Map,稍后我想使用Gson将其序列化为JSON。此映射的某些键包含Unicode字符,如\uf177等。当我尝试将此类映射序列化为JSON时,会出现问题,假设我有map包含: "TEST_KEY" -> "\uf177" 然后,当使用Gson序列化时,我有: { "TEST_KEY": "\\uf177" } 这不是我想要的,我希望这些Unicode符号在序列化时保持原样。有没有办法做到这一点?非常感谢您的帮助 更新 产生问题的代码: projectI18n

我有
Map
,稍后我想使用Gson将其序列化为JSON。此映射的某些键包含Unicode字符,如
\uf177
等。当我尝试将此类映射序列化为JSON时,会出现问题,假设我有
map
包含:

"TEST_KEY" -> "\uf177"
然后,当使用Gson序列化时,我有:

{
    "TEST_KEY": "\\uf177"
}
这不是我想要的,我希望这些Unicode符号在序列化时保持原样。有没有办法做到这一点?非常感谢您的帮助

更新

产生问题的代码:

       projectI18nFileContent = commentsRemover.transform(projectI18nFileContent);

        //find json map which represents translations
        Matcher fullTranslationsMapMatcher = translationsMapSerializedToJsonPattern.matcher(projectI18nFileContent);

        if (!fullTranslationsMapMatcher.find()) {
            throw new IllegalArgumentException(format("%s \n does not contain valid translations json map", projectI18nFileContent));
        }

        String translationsMapSerializedToJson = fullTranslationsMapMatcher.group();
        String newTranslationsMapSerializedToJson = gson.toJson(newTranslations);

        //replace old json translations map with a new
        return projectI18nFileContent.replace(translationsMapSerializedToJson, newTranslationsMapSerializedToJson);
这段代码专门用于为javascript项目更改i18n文件的内容,这就是unicode不应转义的原因(否则它只是解决得不正确)

谢谢, 欢呼声

根据反斜杠,必须避开


所以你不应该试图阻止这一切。这是正确的行为。

是:如果是6个字符的字符串,那么正确的写入方式是“\\uf177”。所以gson的行为是正常的。你能再显示一点代码吗?似乎您的字符串中包含的是普通字符
\uf177
,而不是代表任何Unicode字符的字符串。@JeremyP添加了更多的代码,谢谢!迈克·阿达门科的解决方案是正确的。它实际上包含的是文字序列
\u f 1 7 7
,而不是正在序列化的包含Unicode字符的字符串。如果这是您想要的,那么Mike的答案是正确的,您应该接受它(当JSON字符串被反序列化时,额外的反斜杠将被删除)。如果这不是您想要的,您需要查找字符串的源代码,该字符串提供了一个转义序列而不是Unicode字符。Java编译器应该将
\uF177
转换为它所表示的字符,因此这不是真正正确的答案。@JeremyP您从链接中阅读了Json规范吗?尤其是这部分
\uf177
是单个Unicode代码字符。它应该已经通过了图表中的顶部路径。每当Java编译器看到序列
\uxxx
,其中XXXX是一个十六进制字符串,它就会用它所表示的单个Unicode字符替换该六个字符的序列。不,顶部路径是除“或\或控制字符。因此,因为\uxxx包含\它将被转义。
\uf177
中没有\如果它出现在Java源文件中,因为编译器要做的第一件事是。问题在于,输入字符串意外地包含文字序列
\uf177
,而不是Unicode字符。