Tomcat服务器文件下载问题与编码

时间:2010-08-31 20:55:28

标签: java servlets utf-8 character-encoding

我正在使用以下代码发送回复:

response.setHeader("Content-Encoding","UTF-8");
response.setContentType("text/plain charset=UTF-8");

PrintWriter outWriter = response.getWriter();
String returnString = new String(dataController.translateFile(documentBuffer).getBytes(), "UTF-8");
outWriter.print(returnString);

当我在Eclipse上使用tomcat 6.0.29运行我的Web应用程序时,生成的txt文件为我提供了一个带有utf-8编码的txt文件(我可以看到很多阿拉伯语或中文符号没有问题),但是一旦部署在项目的WAR文件中,生成的txt文件中填充了问号而不是中文或阿拉伯字符。

知道可能出现什么问题?

我还在CONF / Tomcat的server.xml文件中的每个Connector标记上添加了URIEncoding="UTF-8"。 Eclipse正在使用相同的tomcat,但无济于事。

提前致谢!

3 个答案:

答案 0 :(得分:4)

response.setHeader("Content-Encoding","UTF-8");

设置内容类型时,这是多余的。

response.setContentType("text/plain charset=UTF-8");

这实际上是错误的。在charset之前缺少分号。

  

我还在CONF / Tomcat的server.xml文件中的每个Connector标签上添加了URIEncoding =“UTF-8”。

这仅对GET请求参数有效。


您需要的是以下内容:

response.setCharacterEncoding("UTF-8"); // Otherwise platform default encoding will be used to write the characters.
response.setContentType("text/plain; charset=UTF-8");

在调用response.getWriter()getOutputStream()之前调用此

另见:

答案 1 :(得分:1)

我找到了答案,即使我有一些错误和一些不必要的代码,其中BalusC指出,解决方案是在Windows上创建一个环境变量(或者我认为在apache级别),然后重启服务器。

此变量为: JAVA_OPTS ,其值为: -Dfile.encoding = UTF-8

答案 2 :(得分:1)

你提到的伊卡林:

  

此变量为:JAVA_OPTS,其值为:-Dfile.encoding = UTF-8

这是在/conf/server.xml内吗?

美好的一天!