Java servlet json对象包含XML,编码问题
我有一个servlet,它应该以JsonJava 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
{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中,相同的代码(或多或少)会生成外来字符的十六进制表示。再次感谢你的回答。