雄猫的字符编码问题

2022-09-03 00:12:07

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

我的JSP页面编码是这样的:

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

问题是当我尝试使用编码URI传递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>

操作(java端)上的参数显示为:

Gaz Métro

但是在前端,它显示为:

Gaz Métro

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


答案 1

请遵循以下操作

1) 代码

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

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

3) Tomcat Server 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 类型的响应应为“application/x-www-form-urlencoded”


答案 2

您是否遵循了这些步骤?

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

复制如下:

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

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

  1. 在服务器.xml上设置 URIEncoding=“UTF-8”。参考:HTTP 连接器、AJP 连接器。

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

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

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

  4. 更改所有 servlet 以设置响应的内容类型,并在内容类型中包含字符集名称,使其为 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