【问题标题】:Java servlet json object containing XML, encoding problemsJava servlet json 对象包含 XML,编码问题
【发布时间】:2012-01-12 16:28:29
【问题描述】:

我有一个 servlet,它应该回复 Json {obj:XML} 中的请求(意思是一个 Json 里面包含一个 xml 对象)。

XML 以 UTF-8 编码,并有几个字符,例如 => पोलैंड

XML 在org.w3c.dom.Document 中,我正在使用 JSON.org 库来解析 JSON。当我尝试在ServletOutputStream 上打印时,字符编码不正确。我已经测试过它试图在文件中打印响应,但编码不是 UTF-8。

Parser.printTheDom(documentFromInputStream,byteArrayOutputStream);
OutputStreamWriter oS=new OutputStreamWriter(servletOutputStream, "UTF-8");
oS.write((jsonCallBack+"("));
oS.write(byteArrayOutputStream);
oS.write(");");

我什至在本地(没有部署 servlet)上尝试过上一个和下一个代码:

oS.write("पोलैंड");

结果是一样的。

当我尝试打印文档时,该文件是格式良好的 xml。

 oS.write((jsonCallBack+"("));
 Parser.printTheDom(documentFromInputStream,oS);
 oS.write(");");

有什么帮助吗?

【问题讨论】:

  • 您是否尝试过使用HttpServletResponse.getWriter() 提供的Writer,而不是手动包装原始输出流?
  • 您好,感谢 vm 的评论。我尝试使用作家,它似乎只是在某些情况下工作,其他字符格式不正确。你有什么额外的想法吗? @skaffman

标签: java xml servlets character-encoding org.json


【解决方案1】:

通常,如果二进制数据需要成为 xml 文档的一部分,则它是 base64 编码的。有关详细信息,请参阅this question。我建议您对可以具有奇异 UTF-8 字符的字段进行 base64 编码,并在客户端对它们进行 base64 解码。

请参阅this question 了解 java 中 base64 编码/解码的 2 个不错的选择。

【讨论】:

  • 谢谢vm,我试试看。无论如何,为什么这适用于 php?在 php 中,相同的代码(或多或少)产生外来字符的十六进制表示。再次感谢您的回答。
猜你喜欢
  • 2014-04-27
  • 1970-01-01
  • 2015-06-11
  • 2020-08-28
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 2021-02-02
  • 1970-01-01
相关资源
最近更新 更多