本地化字符的com.fasterxml.jackson.databind.ObjectMapper编码

时间:2014-11-20 07:22:21

标签: java json encoding utf-8 fasterxml

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

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

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

问题一直持续到Single JSON形成,一切看起来都很好。

将所有JSON合并并写入文件后,本地化字符全部被编码,而我们希望它们看起来与单个JSON中的外观相同

例如Single JSON代码段

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

例如Merged JSON Snippet

{" title":" Web \ u30b5 \ u30fc \ u30d0 \ u306b \ u95a2 \ u308 \ 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"

谢谢!

1 个答案:

答案 0 :(得分:0)

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

我使用-reverse选项在json上运行native2ascii,我的发现得到了确认。 -reverse还原了ascii编码