0
回答
Struts上传文件的乱码问题解决
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

利用Struts来处理文件上传可大大的方便代码的编写,但是编码的问题随之而来!

问题的现象

页面有一个上传的表单,表单中包含一个文件上传域以及一个文本框域,页面是采用UTF-8进行编码的。当提交表单后,Action中活得到的文件信息无误,文件中若包含中文名也能正确处理,但是文本框中输入的中文在Action类中怎么转码都无法得到正确的信息。

解决办法的途径

经过阅读Struts源码中org.apache.struts.upload包下的所有文件,发现有一个类MultipartIterator涉及到编码的操作:

private default_encoding=""iso-8859-1";

    /**
     * Get the character encoding used for this current multipart element.
     */
    protected String getElementEncoding()
    {
        String encoding = this.inputStream.getElementCharset();
        if (encoding == null)
        {
            encoding = this.request.getCharacterEncoding();
            if (encoding == null)
            {
                encoding = DEFAULT_ENCODING;
            }
        }
        return encoding;
    }
该方法首先调用request.getCharacterEncoding();如果没有指定编码则使用默认的8859_1的编码方式对数据进行解析。

解决思路

在Struts进行表单映射之前先设置好request的编码方式。

解决办法1

新建一个类继承Struts的ActionServlet,覆盖doGet以及doPost方法,在覆盖的方法中调用request.setCharacterEncoding("utf-8");

解决办法2

使用Set Character Encoding Filter

举报
红薯
发帖于9年前 0回/1K+阅
顶部