2012-03-22 57 views
7

Tomcat不能正确编码包含unicode字符的字符串文字。问题发生在Linux服务器上,但不在我的开发机器上(Windows)。它仅影响字符串文字(不是从数据库或从文件中读取的字符串!!!)。如何在tomcat上使用UTF-8

  • 我已经在Connector标记(server.xml)上设置了URIEncoding="utf-8"
  • 我已经使用了setCharacterEncoding()。
  • 我查看堆栈跟踪(没有可能设置编码的过滤器)。
  • 我已经设置LANG环境变量
  • 我cheched HTTP标头和它们是正确的(内容 - 类型= text/plain的;字符集= UTF-8)
  • 我检查了编码在浏览器,它是正确(UTF-8)

以上都没有工作。关于我可能错过的任何想法?

public class Test extends HttpServlet { 

@Override 
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 

    resp.setCharacterEncoding("utf-8"); 
    resp.setContentType("text/plain;"); 

    Writer w = resp.getWriter(); 
    w.write("Μαλακία Latin"); //Some unicode characters 
    w.close(); 
} 

以上显示在浏览器中。 ÎÎÎÎÎÎÎÎκάLatin

+2

确保源java文件具有utf-8编码集。我使用Notepad ++来检查这一点。打开文件并检查“编码”菜单。如果编码不是UTF,则剪切源文件的全部内容,更改编码,粘贴剪贴板中的内容并保存源文件。 – 2012-03-22 12:55:56

+0

如果您在十六进制编辑器中查看服务器响应,返回的实际字节序列是什么?什么是你的源文件的编码? – Mikaveli 2012-03-22 12:56:19

+0

*“问题发生在Linux服务器上,但不在我的开发机器上(Windows)。”*您如何部署到Linux?你是否一个接一个地传输文件?如果是这样,怎么样?通过FTP?如果是这样,你是在二进制模式下传输? – BalusC 2012-03-22 13:00:17

回答

4

当编译时,通过传入-encoding'utf-8'或-encoding'iso-8859-1',当javac读取文件时,您可以强制编码文件。只要确保它匹配你的.java文件实际编码为的任何编码。

http://docs.oracle.com/javase/6/docs/technotes/tools/windows/javac.html

- 编码编码中设置的源文件的编码名称,如EUC-JP和UTF-8。如果未指定-encoding,则使用平台默认 转换器。

+0

this,或者在java代码中使用unicode转义序列而不是字符。 – jtahlborn 2012-03-22 13:47:18

3

尝试设置file.encoding系统属性,例如-Dfile.encoding=utf-8在Linux JVM命令行上

+0

你非常接近。我需要在运行javac时添加这个。我困惑的是,我没有这个选项运行javac,它工作正常。但是,当ant调用javac时,它可能会设置另一个默认编码。 – idrosid 2012-03-22 13:32:10

+0

这为我解决了一个问题,我的.jsp包含一个UTF-8编码的HTML文件片段。添加此参数可以正确加载文件。 – JBCP 2012-11-06 03:43:37

+0

更多选项位于http:// stackoverflow内。com/questions/11342884/change-tomcats-charset-defaultcharset-in-windows – 2014-08-07 09:15:05