• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    jsp SmartUpload 中文乱码问题解决

    在用jspsmartupload组件进行文件上传下载的时候,如果用户选择的是含有中文名字的文件名或是文件路径含有中文,则会出现乱码.经过一段时间的调试,本人已经初步解决了这个问题.现将解决的代码贴出来.

    一、上传

    在SmartUpload.java文件中,增加一个属性private String charset用于进行字符编码转换,相应的有两个方法:

    复制代码 代码如下:
    public void setCharset(String charset)
    {
        this.charset = charset;
    }
    public String getCharset()
    {
        return this.charset;
    }

    另外改动二个地方:

    在upload()方法中,将String s11 = new String(m_binArray,m_startData,(m_endData - m_startData) + 1);改为

    复制代码 代码如下:
    String s11 = new String(m_binArray,m_startData,(m_endData - m_startData) + 1,this.getCharset());

    这个时候我们应该在进行处理上传的jsp中进行设置

    复制代码 代码如下:
    SmartUpload su = new SmartUpload();
    su.setCharset("UTF-8");

    就可以了.

    在getDataHeader()方法中,将String s = new String(m_binArray, i, (j - i) + 1);改为

    复制代码 代码如下:
    String s;
    try
    {
        s = new String(m_binArray, i, (j - i) + 1,this.getCharset());
    }
    catch(Exception e)
    {
        s = "";
    }

    在SmartFile.java文件中,增加一个属性private String charset用于进行字符编码转换,相应的有两个方法:

    复制代码 代码如下:
    public void setCharset(String charset)
    {
        this.charset = charset;
    }
    public String getCharset()
    {
        return this.charset;
    }

    另外需要改动一个地方
    在getContentString()方法中,将String s = new String(m_parent.m_binArray,m_startData,m_size);改为

    复制代码 代码如下:
    String s;
    try
    {
        s = new String(m_parent.m_binArray,m_startData,m_size,this.getCharset());
    }
    catch(Exception e)
    {
        s = "";
    }

    对于SmartFile.java文件中,本人认为可改可不改,不会对上传有什么影响.
    经过如此改动源代码后,对于中文乱码问题有很好的解决能力.

    二、下载
    在SmartUpload.java文件中,将downloadFile(String s, String s1, String s2, int i)方法改为

    复制代码 代码如下:
    public void downloadFile(String s, String s1, String s2, int i)
    throws ServletException, IOException, SmartUploadException
    {
        if(s == null)
            throw new IllegalArgumentException("File '" + s +
                "' not found (1040).");
        if(s.equals(""))
            throw new IllegalArgumentException("File '" + s +
                "' not found (1040).");
            if(!isVirtual(s) m_denyPhysicalPath)
                throw new SecurityException("Physical path is
                    denied (1035).");
        if(isVirtual(s))
            s = m_application.getRealPath(s);
        java.io.File file = new java.io.File(s);
        FileInputStream fileinputstream = new FileInputStream(file);
        long l = file.length();
        boolean flag = false;
        int k = 0;
        byte abyte0[] = new byte[i];
        if(s1 == null)
            m_response.setContentType("application/x-msdownload");
        else if(s1.length() == 0)
            m_response.setContentType("application/x-msdownload");
        else
            m_response.setContentType(s1);
        m_response.setContentLength((int)l);
        m_contentDisposition = m_contentDisposition != null ? m_contentDisposition : "attachment;";
        if(s2 == null)
            m_response.setHeader("Content-Disposition", m_contentDisposition + " filename=" + toUtf8String(getFileName(s)));
        else
            if(s2.length() == 0)
                m_response.setHeader("Content-Disposition", m_contentDisposition);
            else
                m_response.setHeader("Content-Disposition", m_contentDisposition + " filename=" + toUtf8String(s2));
        while((long)k l)
        {
            int j = fileinputstream.read(abyte0, 0, i);
            k += j;
            m_response.getOutputStream().write(abyte0, 0, j);
        }
        fileinputstream.close();
    }
     

    另外需要增加一个获得汉字字符的UTF-8编码的方法

    复制代码 代码如下:
    /**
    * 将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名.
    * 雨亦奇2003.08.01
    * @param s 原文件名
    * @return 重新编码后的文件名
    */
    public static String toUtf8String(String s) {
        StringBuffer sb = new StringBuffer();
        for (int i=0;is.length();i++) {
            char c = s.charAt(i);
            if (c >= 0 c = 255) {
                sb.append(c);
            } else {
                byte[] b;
                try {
                    b = Character.toString(c).getBytes("utf-8");
                } catch (Exception ex) {
                    System.out.println(ex);
                    b = new byte[0];
                }
                for (int j = 0; j b.length; j++) {
                    int k = b[j];
                    if (k 0) k += 256;
                    sb.append("%" + Integer.toHexString(k).toUpperCase());
                }
            }
        }
        return sb.toString();
    }

    将这个增加到SmartUpload.java文件中,下载时的另存中文名乱码问题便不会出现了,处理完了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • 浅谈jsp文件和HTML互相引入的乱码问题
    • JSP struts2 url传参中文乱码解决办法
    • jsp用过滤器解决中文乱码问题的方法
    • JSP MySQL插入数据时出现中文乱码问题的解决方法
    • 请求转发jsp页面乱码问题的快速解决方法
    • jsp传参 servlet接收中文乱码问题的解决方法
    • JSP对URL链接中的中文乱码处理方法总结
    • JSP服务器端和前端出现乱码问题解决方案
    上一篇:浅析JSP的9大内置对象和4大作用域对象
    下一篇:tomcat6下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    jsp SmartUpload 中文乱码问题解决 jsp,SmartUpload,中文,乱码,