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字符。