UTF-8编码和http参数

我正在使用YahooUI Javascript库进行简单的ajax调用,如下所示:

YAHOO.util.Connect.setForm('myform'); YAHOO.util.Connect.asyncRequest('POST', url, ...); 

以下是我的应用程序中的设置:Tomcat版本:6.0.18

Tomcat服务器连接器:URIEncoding =“UTF-8”webapp页面:

在YahooUI连接器库文档中也有说明:

setForm将使用encodeURIComponent对每个HTML表单字段的名称和值进行编码。 这会产生一串UTF-8编码的名称 – 值对。 注意:使用不同的字符集值设置“Content-Type”的HTTP标头不会更改序列化数据的编码。序列化数据的编码。

我可以看到作为参数发送的法语字符被编码(在ie7中使用iehttpheader工具):

  name=%C3%88%C3%A0%C3%B4 testParam=%C3%B4%C3%B4 

对于数据:名称:Èàô和testParam:ôô

但在服务器端,我看到的价值如下:ÃÂÃÂÃÂ

即使我将字符串转换为字节,然后使用如下定义的字符集创建新字符串:String val = new String(oo.getBytes(“UTF-8”)); 我无法按预期获得准确的数据。

注意:我已经引用了下面的问题,但无法解决此问题: 如何让UTF-8在Java webapps中运行? 请指导。

更新:调用W3.org网站http://www.w3.org/International/O-URL-code.html上给出的解码UTF-8function给我预期的结果。 我希望Tomcat能解码吗?

由于您使用的是POST查询,因此URIEncoding="UTF-8"不适用于此处。 您需要设置一个filter来告诉Tomcat您的请求编码是UTF-8。 例如,您可以使用Spring的CharacterEncodingFilter ( 用法 , javadoc )。 也可以找到这种filter的其他实现。

是的,这是一个:

 package com.lfantastico.web; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class EncodingFilter implements Filter { private String encoding = "UTF-8"; public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding(encoding); response.setCharacterEncoding(encoding); chain.doFilter(request, response); } public void init(FilterConfig config) throws ServletException { if (config.getInitParameter("encoding") != null) { encoding = config.getInitParameter("encoding"); } } }