Tomcat 5.0使用UTF-8编码的文件名提供静态资源

时间:2011-10-25 15:12:43

标签: tomcat utf-8 character-encoding

我尝试在Suse Linux Enterprise Server 11.2上设置Tomcat-Server Version 5.0.30-27.35。应该通过这个tomcat提供一大堆静态资源。 (由于该系统上的管理员限制,升级tomcat-Server不是一种选择。)问题是,某些文件具有带特殊字符的文件名,并且Tomcat-Server不提供这些文件 - 例如在浏览器中访问http://myserver/qm-iso/aä.html时,我收到HTTP 404错误(wget,FF,IE,Chrome)。 (文件/qm-iso/aä.html存在)

我的设置:

  • Linux-Server设置为UTF-8。

  • Tomcat以JAVA_OPTS -Dfile.encoding = UTF8启动。

  • Tomcat-HTTP-Connector在server.xml中设置为URIEncoding =“UTF-8”<connector ... URIEncoding="UTF-8">

  • Default-Servlet在web.xml中有一个init-param fileEncoding

    <init-param><param-name>fileEncoding</param-name><param-value>UTF-8</param-value></init-param>

我已经设置了一个打印出<%= System.getProperty("file.encoding") %><%= (new OutputStreamWriter(new ByteArrayOutputStream())).getEncoding() %>的Test-JSP - 都显示了UTF-8。

我在设置tomcat-log-level时调试并在访问URL http://myserver/qm-iso/aä.html

时读取这些日志记录语句
Attributes
javax.servlet.forward.request_uri : /qm-iso/a%C3%A4.html
javax.servlet.forward.context_path : 
javax.servlet.forward.servlet_path : /qm-iso/aä.html
javax.servlet.forward.path_info : /error.html
javax.servlet.error.request_uri : /qm-iso/a%C3%A4.html
javax.servlet.error.servlet_name : default
javax.servlet.error.status_code : 404
javax.servlet.error.message : /qm-iso/a%C3%A4.html

对我看来,logentry javax.servlet.forward.servlet_path显示错误的编码aä¤.html。具有%C3%A4.html的行似乎正确编码。

任何想法,我可能忘记了什么?知道什么可以帮助吗?

理查德

1 个答案:

答案 0 :(得分:1)

您需要(让您的管理员)将URIEncoding中的<Connector>元素的/conf/server.xml属性设置为UTF-8

<击>

<Connector ... URIEncoding="UTF-8">

默认情况下,它们被解释为ISO 8859-1,这是一个单字节字符编码。然后,UTF-8 0xC3字符的单个0xA4ä字节将分别表示为字符ä,另请参阅{{ 3}}

参见:


更新:抱歉,我忽略了您已经设置了URIEncoding属性。现在这似乎是一个Tomcat 5.0特定的问题。设置该属性可以解决Tomcat 7上的问题(很可能也是最新的6)。我建议升级到更新的Tomcat版本。 Tomcat 5.0多年来一直是EOL。