2012-03-22 77 views
0

我有2个服务器:1个Tomcat 6在Windows和一个JBoss 5在Linux中。字符集编码Tomcat Windows/JBoss Linux

当编写JSON(应用A/JSON),以ouputstream我得到特殊字符(A,A,等。)就在Tomcat的,但错在JBoss中。

这是怎么说的对输出流:

protected void writeToOutputStream(String response, String tag) { 
    ServletOutputStream outputStream = null; 
    try { 
     logInfo("Writing to output stream"); 
     outputStream = httpresponse.getOutputStream(); 
     outputStream.write(response.getBytes(), 0, response.getBytes().length); 
     outputStream.flush(); 
    } catch (IOException ex) { 
     logError("Could not write response into output stream", ex); 
    } finally { 
     try { 
      outputStream.close(); 
     } catch (IOException ex) {} 
    } 
} 

如果我强迫与字符集

httpresponse.setCharacterEncoding("utf-8"); 

它得到确定在JBoss中而不是在tomcat的...

任何想法如何解决这个问题?

回答

2

response.getBytes()使用平台默认的编码字符串转换为字节和编码很可能不会在你的Windows(CP-1252)相同,并且Linux机器(UTF-8)。

你应该传递getBytes()的编码(最好是'utf-8'),它必须与你的content-type响应头(上面代码中的utf-8)中的charset指定的编码相同。

作为一个侧面说明,你写的Outpustream和的getBytes双()调用的方式是非常低效的。如果你想让你的代码小巧而高效,可以使用Apache commons-io和像IOUtils.copy()这样的工具来处理流。

+0

解决!我注意到,双重调用getBytes。现在我只做了一次,谢谢你的提示! – 2012-03-22 18:37:42