字符编码问题和Tomcat(Character encoding issue with Tomcat

2019-06-25 14:02发布

有奇怪的字符编码回事。 我使用的JSP(JSTL)和Struts与托马特6。

我有我的JSP页面编码为这样的:

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

问题是,当我试图通过使用是encodeURI这样的网址:

<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>

在行动(java的结束)的参数出来的:

Gaz Métro

然而在前端,显示为:

Gaz Métro

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

Answer 1:

做以下

1)HTML代码

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

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

3)Tomcat服务器server.xml中 - 在连接器标签中添加“的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类型的响应应该是“应用程序/ x WWW的形式进行了urlencoded”



Answer 2:

你有没有按照这些步骤是什么?

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

下面复制:

使用UTF-8字符编码的一切是一个安全的赌注。 这应该适用于几乎每一种情况。

为了彻底切换到使用UTF-8,你需要做以下修改:

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

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

  3. 更改所有的JSP中的contentType其包含的字符集的名字。

    例如,使用<%@page contentType="text/html; charset=UTF-8" %>对于通常JSP页面和<jsp:directive.page contentType="text/html; charset=UTF-8" />在XML语法的页面(又名JSP文件)。

  4. 更改所有的servlet设置内容类型的回应,包括字符集名称在内容类型为UTF-8。

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

  5. 改变你使用任何内容生成库(速度的Freemarker等)使用UTF-8和内容类型,它们产生响应的指定UTF-8。

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



Answer 3:

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

例如:

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


文章来源: Character encoding issue with Tomcat