2012-06-18 164 views
9

我一直试图解决这个问题约7个小时。Tomcat字符编码问题

有奇怪的字符编码正在进行。我使用的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的端)参数出来为: 达伽兹MéTRO

然而在前端,显示为: ģ AZ的地铁

这是正确的方式(燃气电厂)...

任何想法,我能做些什么这个?

+2

你在哪里上看到的价值Java结束了吗?在日志文件中?如果是的话,它可能是您使用读取日志文件编辑器并不期望UTF-8 ... – atk

回答

1

尝试设置你的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"/> 
+0

感谢您的建议。我在发布前尝试这一点,并没有解决问题。 – OakvilleWork

+0

这有什么好做的输出编码。它只会影响从客户端读取数值,只为GET参数值。 –

6

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

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. 更改您使用的任何内容生成库(Velocity,Freemarker等)以使用UTF-8并在它们生成的响应的内容类型中指定UTF-8。

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

+0

非常感谢保罗......我已经尝试了所有上述的..仍然没有运气,我一直试图找到一个解决方案,我甚至看到的解决方案建议编码成UTF-8手动!我不想使用这个选项,虽然...基本上这篇文章是类似于我的问题: http://stackoverflow.com/questions/6213377/handle-french-characters-in-java 但是,这些建议don'不管工作。 – OakvilleWork

+0

我已经看到** 6 **使用WebSphere Portal Server负责这个“在野外”。尝试并跟踪每个请求,如果* anything *尝试在设置正确的编码之前读取请求参数,则该值将被读为ISO8859-1(如果我没有记错,这是在servlet规范中指定的)。 –

10
执行

以下

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”

+0

我一直在寻找一整天来完成整理。所有在Jetty上都工作得很好,但是当部署到Tomcat时,我的元音变音会失踪。谢谢! – Will