Java和Java中的UTF-8解码问题Tomcat7

时间:2013-07-18 15:42:28

标签: java character-encoding tomcat7 httprequest

我正在向服务器发送一个AJAX请求,其中param值在“escape(...)”函数中编码。

Tomcat服务器(7.0.42)已配置为s.t.接收连接器有一个URIEncoding =“UTF-8”,在web.xml中我已经配置了SetCharacterEncodingFilter,如下所示:

<filter>
    <filter-name>charencode</filter-name>
    <filter-class>
        org.apache.catalina.filters.SetCharacterEncodingFilter
    </filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>charencode</filter-name>
    <url-pattern>*</url-pattern>
</filter-mapping>

,另外我创建了一个过滤器来将响应编码为UTF-8:

@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
    arg1.setCharacterEncoding("UTF-8");
    arg2.doFilter(arg0, arg1);
}

解析来自拉丁字符集的params没有问题,但是当我尝试俄语时,request.getParameter(..)返回null。另外,我在日志中得到这个(怀疑它来自SetCharacterEncodingFilter):

INFO: Character decoding failed. Parameter [usersaid] with value [%u044B%u0432%u0430%u044B%u0432%u0430%u044B%u0432%u044B%u0432%u0430%u044B%u0432%u0430%21] has been ignored. Note that the name and value quoted here may be corrupted due to the failed decoding. Use debug level logging to see the original, non-corrupted values.

并且没有DEBUG级消息要遵循(我的记录器设置正确,我相信..)

你能告诉我吗?很乐意回答问题!

非常感谢, 胜者。

1 个答案:

答案 0 :(得分:2)

该字符串无法解码。与您的应用程序服务器无关。尝试使用这些工具来查看自己:

http://www.albionresearch.com/misc/urlencode.php http://meyerweb.com/eric/tools/dencoder/

因此,错误看起来可能是客户端。确保在urlencoding时正确设置编码。您可能正在使用其他UTF-8,这是您应该使用的。

这是一个正确编码unicode字符的线程:What is the proper way to URL encode Unicode characters?