在我提到我的主要问题之前有一点背景
我们有一个通过 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"
谢谢!