彻底解决jsp中用SmartUpload上传附件中文乱码问题
    最近开发一个基于J2EE平台的DRP项目,其中需要上传下载大量的附件。项目中所使用的数据库为Oracle8I,操作系统和Web应用服务程序为:开发环境Win2000/Tomcat开发测试环境Win2000/WebSphere6.0正式环境Unix/WebSphere6.0三相异步电机点动控制实验报告>什么叫多线程处理工作正式环境的备用服务器Linux/WebSphere6.0。在开发上传附件中出现了一个很普通很麻烦的问题,就是中文名称乱码问题,根据网上查询的资料,很快解决了①②③环境下的乱码,但环境下依然是乱码。最后,经过持续一个多月的研究实验,终于到一种同时满足①②③④种环境的解决办法。
    基本原理是:(1)、在上传之前,先对要上传的文件名进行编码;
                          (2)、对编码后的文件名解码后,再插入数据库中。
    基本实现如下面的代码片段,
    上传代码:
    ......
    <input type="file" name="upFile" size="40" maxlength="100">
    <input type="button" name="btUpload" value="上传附件" onClick="doFileUpLoad();">
阿普尔龙珠
    <input type="hidden" name="table_name1" value="">
    ......matlab中字符串转数字
<script>
  function doFileUpLoad(){
    ..... 
  //使用javascript的函数escape编码后放到域table_name1
  form1.table_name1.value = escape(form1.upFile.value);
  form1.submit();
    ......
  }
</script>

    JSP代码:
    ......
    //获取上传的文件名,并用自编的unescape函数解码
    table_name1 = CUtil.Request().getParameter("table_name1").toString());
    //分离目录信息,在数据库中只存储文件名
    table_name1 = actFileName(table_name1);
    ......
radio station用英语怎么说   
    unescpe函数代码:
    public static String unescape(String src) {
      StringBuffer tmp = new StringBuffer();
      sureCapacity(src.length());
      int lastPos = 0, pos = 0, nLen = src.length();
      char ch;
      while (lastPos < nLen) {
         pos = src.indexOf("%", lastPos);
         if (pos == lastPos) {
jsp中文全称
          if (src.charAt(pos + 1) == 'u') {
          ch = (char) Integer.parseInt(src.substring(pos + 2, pos + 6), 16);
           tmp.append(ch);
          lastPos = pos + 6;
          } else {
          ch = (char) Integer.parseInt(src.substring(pos + 1, pos + 3), 16);
           tmp.append(ch);
          lastPos = pos + 3;
        }
      } else {
       if (pos == -1) {
        tmp.append(src.substring(lastPos));
         lastPos = nLen;
        } else {
         tmp.append(src.substring(lastPos, pos));
        lastPos = pos;
       }
     }
    }
  String();
 }

 下载处理代码:
  ......
  String FileName = rs.getString("NEWFILE_NAME"); //附件存储在服务器上的文件名
   String oFileName = rs.getString("OLDFILE_NAME"); //附件原来的文件名
  //以下代码的作用是,在浏览器中下载附件时,提示的中文名称不为乱码
  oFileName = new Bytes("gb2312"),"iso8859-1");
  mySmartUpLoad.downloadFile(FileName,null,oFileName);
  ......


  提示:本系统使用SmartUpload组件上传/下载附件

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。