2012-01-12 40 views
1

我有一个servlet,它应该回复Json {obj:XML}中的请求(表示包含内部xml对象的Json)。包含XML,编码问题的Java servlet 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(");"); 

我甚至在当地tryed(不deploing servlet的)前一个和下一个代码:

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

,结果是一样的。

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

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

任何帮助?

+0

您是否尝试过使用由'HttpServletResponse.getWriter()'提供的'Writer',而不是手动包装原始输出流? – skaffman 2012-01-12 16:45:39

+0

嗨,感谢您的评论vm。我试图使用作者,并且它在某些情况下似乎工作,其他字符不正确。你有什么想法吗? @skaffman – pokeRex110 2012-01-16 10:11:14

回答

0

通常,如果二进制数据需要是xml文档的一部分,则它是base64编码的。有关更多详细信息,请参阅this question。我建议你base64编码的字段可以有异国情调的UTF-8字符和base64解码他们在客户端。

请参阅this question为java中base64编码/解码的两个很好的选项。

+0

谢谢你,我会试试看。无论如何,为什么这对PHP工作?在PHP中,相同的代码(或多或少)会产生异国情调字符的十六进制表示。再次感谢您的答复。 – pokeRex110 2012-01-13 08:22:02