Java UTF-8编码和http参数

Java UTF-8编码和http参数,java,utf-8,character-encoding,Java,Utf 8,Character Encoding,我正在使用YahooUI Javascript库执行一个简单的ajax调用,如下所示: YAHOO.util.Connect.setForm('myform'); YAHOO.util.Connect.asyncRequest('POST', url, ...); 以下是我的应用程序中的设置: Tomcat版本:6.0.18 Tomcat服务器连接器:URIEncoding=“UTF-8” 网络应用程序页面: YahooUI连接器库文档中也有说明: setForm将对每个HTML表单进行编码

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

YAHOO.util.Connect.setForm('myform');
YAHOO.util.Connect.asyncRequest('POST', url, ...);
以下是我的应用程序中的设置: Tomcat版本:6.0.18

Tomcat服务器连接器:URIEncoding=“UTF-8” 网络应用程序页面:

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

setForm将对每个HTML表单进行编码 字段的名称和值使用 编码元件。这导致了 UTF-8编码的字符串,名称值 对。注意:设置的HTTP头 “内容类型”具有不同的 字符集值不会更改 序列化数据的编码。序列化数据的编码

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

有关数据: 姓名:ÈÈ 和testParam:

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

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

注意:我引用了下面的问题,但无法解决此问题:请指导

更新:
调用W3.org网站上给出的decode UTF-8函数可以得到预期的结果。我希望Tomcat能够解码这个?

因为您使用的是
POST
查询,
URIEncoding=“UTF-8”
在这里不适用。您需要设置一个过滤器来告诉Tomcat您的请求编码是UTF-8。例如,您可以使用Spring的
字符编码过滤器
(,)。还可以找到此类过滤器的其他实现。

是的,这里有一个:

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");
        }
    }
}

是的,这是有效的-我必须确保我应用的过滤器(SetCharacterEncodingFilter-可在tomcat示例文件夹中找到)必须是在我的其他过滤器之前调用的第一个过滤器,并且它有效!。谢谢:)这里是另一个使用链接,因为上面的链接似乎已断开:
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");
        }
    }
}