Tomcat的字符编码问题

时间:2012-06-18 19:35:46

标签: java jsp tomcat jstl tomcat6

正在进行奇怪的字符编码。我正在使用JSP(JSTL)和Struts与Tomat 6。

我的JSP页面编码如下:

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

问题是当我尝试使用encodeURI传递url时:

<script type="text/javascript">
          $('#mailer_filter').change(function(){
            var val = $(this).val();
            console.log(val);
            console.log(escape(val));
            console.log(encodeURI(val));
            location.href = 'mailList.a?' + encodeURI($(this).val());
          });
        </script>

action(java end)上的参数如下:

Gaz Métro

然而在前端它显示为:

Gaz Métro

这是正确的方法。我能做些什么?

3 个答案:

答案 0 :(得分:17)

请执行以下操作

1)HTML代码

 <meta contentType="text/html; charset="UTF-8"/>

2)IE的浏览器设置  视图 - 编码 - Unicode(UTF-8)

3)Tomcat服务器  server.xml - 在Connector标记中添加“URIEncoding”属性为

<Connector port="8080" protocol="HTTP/1.1" 
           connectionTimeout="20000" 
           redirectPort="8443" URIEncoding="UTF-8"/>

catalina.sh/catalina.bat - 添加以下

set JAVA_OPTS=--Xms256m -Xmx1024m -Xss268k -server -XX:MaxPermSize=256m -XX:-UseGCOverheadLimit -Djava.awt.headless=true -Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8

set CATALINA_OPTS=-Dfile.encoding="UTF-8"

4)响应的MIME类型应为“application / x-www-form-urlencoded”

答案 1 :(得分:11)

您是否按照这些步骤进行操作?

http://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q8

复制如下:

使用UTF-8作为所有内容的字符编码是一个安全的选择。这应该适用于几乎所有情况。

要完全切换到使用UTF-8,您需要进行以下更改:

  1. 在server.xml中设置URIEncoding =“UTF-8”。参考:HTTP连接器,AJP连接器。

  2. 使用字符编码过滤器,默认编码设置为UTF-8

  3. 更改所有JSP以在其contentType中包含charset名称。

    例如,对于通常的JSP页面使用<%@page contentType="text/html; charset=UTF-8" %>,对于XML语法(也称为JSP文档)使用<jsp:directive.page contentType="text/html; charset=UTF-8" />

  4. 更改所有servlet以设置响应的内容类型,并在内容类型中包含charset name为UTF-8。

    使用response.setContentType("text/html; charset=UTF-8")response.setCharacterEncoding("UTF-8")

  5. 更改您使用的任何内容生成库(Velocity,Freemarker等)以使用UTF-8并在其生成的响应的内容类型中指定UTF-8。

  6. 在字符编码过滤器或jsp页面有机会将编码设置为UTF-8之前,禁用任何可能读取请求参数的阀门或过滤器。有关更多信息,请参阅http://www.mail-archive.com/users@tomcat.apache.org/msg21117.html

答案 2 :(得分:2)

尝试将tomcat连接器的URIEncoding参数(在server.xml中)设置为UTF-8:

E.g:

<Connector port="8080" maxHttpHeaderSize="8192"
           maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
           enableLookups="false" redirectPort="8443" acceptCount="100"
           connectionTimeout="20000" disableUploadTimeout="true"
           URIEncoding="UTF-8"/>