Encoding Struts 1中多部分/表单数据的编码

Encoding Struts 1中多部分/表单数据的编码,encoding,character-encoding,struts,Encoding,Character Encoding,Struts,对于Struts web应用程序,我有一个非常奇怪的情况: 我有一个包含多部分/表单数据类型表单的页面。页面位于ISO-8859-1中,根据tomcat环境的不同,我有两种不同的情况: 开发环境是具有Windows默认编码的Windows计算机 生产环境是一台采用UTF-8编码的Linux机器 :$echo$LANG :$es_.UTF-8 在windows环境中,提交表单时,所有参数都正确编码 在linux环境中,提交表单时,Struts使用错误的编码检索参数(像“??”这样的符号而不是“

对于Struts web应用程序,我有一个非常奇怪的情况:

我有一个包含多部分/表单数据类型表单的页面。页面位于ISO-8859-1中,根据tomcat环境的不同,我有两种不同的情况:

  • 开发环境是具有Windows默认编码的Windows计算机
  • 生产环境是一台采用UTF-8编码的Linux机器

    :$echo$LANG
    :$es_.UTF-8

在windows环境中,提交表单时,所有参数都正确编码

在linux环境中,提交表单时,Struts使用错误的编码检索参数(像“??”这样的符号而不是“áêíóú”)

web应用程序的其余POST表单在这两种环境中都正常工作。问题只存在于多部分表单


可以在Tomcat上配置多部分请求的编码吗

我怀疑问题可能是在多部分形式中,字符没有编码,tomcat不知道请求的编码,因此它尝试用操作系统的编码对它们进行解码

因此,一个对我有效的解决方案是开发一个过滤器,将请求的编码设置为ISO-8895-1

过滤器仅设置编码:

    public void doFilter(ServletRequest request, ServletResponse aResponse,
            FilterChain filterChain) throws IOException, ServletException {

            request.setCharacterEncoding("ISO-8859-1");
            filterChain.doFilter(aRequest, aResponse);
    }

使用此筛选器,它可以在两种环境中工作

正如我在下一个链接中所读到的,multipart/form数据和application/x-www-form-urlencoded(默认值)之间的区别如下:在第一个链接中:没有编码字符。但在第二种情况下:所有字符在发送前都进行编码(空格转换为“+”符号,特殊字符转换为ASCII十六进制值)。与: