0

在我提到我的主要问题之前有一点背景

我们有一个通过 FasterXML 将 POJO 转换为 JSON 的模块。逻辑是有多个​​ XML 先转换成 POJOS,然后再转换成 JSON。

然后将这些多个 JSON 中的每一个组合成一个 JSON 并由第三方处理。

问题一直存在,直到形成单个 JSON,一切看起来都很好。

一旦所有的 JSON 被合并并写入一个文件,本地化的字符都会被编码,而我们希望它们看起来像它们在单个 JSON 中的样子

例如单个 JSON 片段

{"title":"网络サーバに关するお知らせ"}

例如合并的 JSON 片段

{“标题”:“网络 \u30b5\u30fc\u30d0\u306b\u95a2\u3059\u308b\u304a\u77e5\u3089\u305b”}

byte[] jsonBytes = objectMapper.writeValueAsBytes(object);
String jsonString = new String(jsonBytes, "UTF-8");

然后将此 JSON 字符串写入文件

BufferedWriter writer = new BufferedWriter(new FileWriter(finalJsonPath));
writer.write(jsonString);

还尝试了以下操作,因为我认为我们需要 UTF-8 编码来处理本地化字符

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(finalJsonPath),"UTF-8"));
writer.write(jsonString);

相同的objectmapper代码也用于写入单个json,此时编码不会出现..

请任何人指出是什么导致了合并 JSON 级别的编码问题?

PS:代码是部署到tomcat上的战争的一部分。最初我们可以看到???(JSON 中的问号)然后我们将以下内容添加到 catalina.sh

JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"

后来,我还添加了 servlet 请求编码,但这并没有帮助

JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Djavax.servlet.request.encoding=UTF-8"

谢谢!

4

1 回答 1

0

刚刚观察到代码正在处理合并的 json。它在合并的 json 上运行 native2ascii 命令,因此 json 本地化内容被转换为 ASCII 字符

我使用 -reverse 选项在 json 上运行 native2ascii,我的发现得到了证实。-reverse 恢复了 ascii 编码

于 2014-11-20T11:21:33.860 回答