UTF-8编码和http参数

Ann*_*nna 5 java utf-8 character-encoding

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

YAHOO.util.Connect.setForm('myform');
YAHOO.util.Connect.asyncRequest('POST', url, ...);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

    name=%C3%88%C3%A0%C3%B4 
    testParam=%C3%B4%C3%B4   
Run Code Online (Sandbox Code Playgroud)

对于数据:名称:Èàô和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-8功能给我预期的结果.我希望Tomcat能解码吗?

axt*_*avt 7

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

  • 这是另一个用法链接,因为上面的一个看起来很破碎:http://azizsaboor.wordpress.com/2008/06/10/spring-utf-8-conversion-using-characterencodingfilter/ (2认同)