Java servlet json对象包含XML,编码问题

Java servlet json对象包含XML,编码问题,java,xml,servlets,character-encoding,org.json,Java,Xml,Servlets,Character Encoding,Org.json,我有一个servlet,它应该以Json{obj:XML}的形式响应请求(意思是内部包含XML对象的Json) XML是用UTF-8编码的,有几个字符,比如=>पोलैंड XML位于org.w3c.dom.Document中,我正在使用JSON.org库解析JSON。当我试图在ServletOutputStream上打印它时,字符编码不好。我已经测试过它试图在文件中打印响应,但是编码不是UTF-8 Parser.printTheDom(documentFromInputStream,byteA

我有一个servlet,它应该以Json
{obj:XML}
的形式响应请求(意思是内部包含XML对象的Json)

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(");");

有什么帮助吗?

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


有关java中base64编码/解码的两个好选项,请参阅。

您是否尝试过使用
HttpServletResponse.getWriter()
提供的
Writer
,而不是手动包装原始输出流?您好,感谢您的评论。我试着使用writer,但它似乎在某些情况下有效,其他字符的格式不好。你还有其他想法吗@斯卡夫曼谢谢你,我会试试的。无论如何,为什么这在php上有效?在php中,相同的代码(或多或少)会生成外来字符的十六进制表示。再次感谢你的回答。