Struts2如何设置UTF-8字符编码

4

我有一个jsp文件,我在这个文件中收集表单值,并通过jquery Ajax将其发送到struts 2动作类。

我的Ajax函数如下:

var DataValues = $("#Form1").serialize();
    alert(DataValues);
    alert(decodeURI(DataValues));
    $.ajax({url: urlPass,
        dataType:datatypepass,
        method:methodpass,
        data:DataValues,
        success: function(data,stat,Xhr){calbackPass(data,stat,Xhr);},
        error:function(xhr, status, error){alert("Error : "+xhr.responseText+" status : "+xhr.status);}
    });

当我解码URL并弹出文本时,我正确地进行了编码和解码。
当我通过ajax将其发送到struts2时,它会出现问题。
我已经检查了拦截器中的值,显示值为"???????"。
拦截器。
  public class LoginInterceptor extends AbstractInterceptor implements StrutsStatics
    {
    @Override
        public String intercept(ActionInvocation arg0) throws Exception 
        {
            HttpServletRequest rs=ServletActionContext.getRequest();
            System.out.println(rs.getCharacterEncoding());
            Map session=ActionContext.getContext().getSession();
            Map<String, Object> parameters=ActionContext.getContext().getParameters();
            for(Map.Entry<String, Object> ll:parameters.entrySet())
            {
                String a[]=(String[])ll.getValue();
                for(String b:a)
                {
                    System.out.println(ll.getKey()+" : "+b);
                }   
  }}}}

在我的JSP文件中,我已将内容类型设置为UTF-8,并在AJAX中也检查了内容类型,但它仍然无效。在Tomcat的server.xml中,我也已将内容类型设置为UTF-8。
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>

任何其他设置都必须针对这个UTF-8进行完成。
提前致谢。

我也使用struts2,以下是使其正常工作的步骤:https://dev59.com/xHVC5IYBdhLWcg3w9F89 - coding_idiot
根据URL,*正常工作,请尝试使用此字符“அழகு”。 - alagusathish
UTF-8并不支持所有语言,https://dev59.com/9m025IYBdhLWcg3wEhZb - coding_idiot
1个回答

6
在你的web.xml中添加一个字符编码过滤器,它在Struts之前拦截所有请求。
<filter>
  <filter-name>CharacterEncodingFilter</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>
  <init-param>
    <param-name>ignore</param-name>
    <param-value>true</param-value>
  </init-param>
</filter>

<filter-mapping>
  <filter-name>CharacterEncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

org.apache.catalina.filters.SetCharacterEncodingFilter 是 Tomcat 7.0.20 及以上版本预装的过滤器。否则,您可以自己实现一个 Filter 并使用它来设置字符编码。

编辑:已添加 / 以正确关闭 filter 和 filter-mapping 标签

request.setCharacterEncoding("UTF-8");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接