杰克逊的错误字体

时间:2015-04-16 04:27:01

标签: json utf-8 jackson

虽然我为JsonGenerator设置了编码UTF8但是当我用仍然错误的字体写字符串时

JsonFactory jsonFactory = new JsonFactory();
OutputStream out = new ByteArrayOutputStream();
JsonGenerator jsonGenerator = jsonFactory.createJsonGenerator(out, JsonEncoding.UTF8);
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField("errorCode", "0");
jsonGenerator.writeStringField("responseData", "Tiếng Việt"); 
jsonGenerator.writeEndObject();
jsonGenerator.close();
String jsonObject = out.toString(); //{"errorCode":"0","responseData":"Tiếng Việt"}

任何人都可以帮助我吗?非常感谢!

更新

我找到了为什么不工作的原因。您可以尝试使用StringWrite而不是OutputStream。看起来像@Alastair McCormack回答。

StringWriter sw = new StringWriter();
JsonGenerator jsonGenerator = jsonFactory.createJsonGenerator(sw);|
...
// add your content here
String jsonObject = sw.toString()

1 个答案:

答案 0 :(得分:0)

最大的问题是out.toString(),因为它会使用您的语言环境将字节转换回Unicode字符串。这可能与您的WebSphere实例不同,也可能与本地计算机不同。

尝试:

String jsonObject = out.toString("UTF-8")

如果您要将此字符串发送到浏览器,请确保正确设置Content-Type标头,以便客户端知道它接收内容的编码。

建议:

如果您不使用out中的字节,您可能需要考虑使用StringWriter:

StringWriter sw = new StringWriter();
JsonGenerator jsonGenerator = jsonFactory.createJsonGenerator(sw);
...
// add your content here
String jsonObject = sw.toString()

这将使字符串保持Unicode,直到您准备好将数据写出来为止。