需要一段中文名字转换函数:
public String convertFileName(String src) 
  {
  try {
byte[] b = src.getBytes();
char[] c = new char[b.length];
for (int i = 0; i < b.length; i++) 
{
  c[i] = (char) (b[i] & 0x00FF);
}
return new String( c );
  }
  catch (Exception e) 
  {
System.out.println(e.toString());
return src;
  }
}
///////////////////////////////////////////////////////
//调用如下
String filename = convertFileName(request.getParameter( "filename" ));

解决方案 »

  1.   

    //我们的实例,希望对你有帮助:
    <%@page language="java" import="java.util.*,java.io.*;" contentType="text/html;charset=gb2312"%>
    <jsp:useBean id="download_obj" class="publicbean.FileDownLoadBean" scope="request">
    </jsp:useBean>
    <%!
    String downloadpath = "";
    Vector list = new Vector();//获得下载文件的名字和相对路径,在list里面的第一个元素的值是文件的名字,第二个是文件的相对路径
      public String convertFileName(String src) 
      {
      try {
    byte[] b = src.getBytes();
    char[] c = new char[b.length];
    for (int i = 0; i < b.length; i++) 
    {
      c[i] = (char) (b[i] & 0x00FF);
    }
    return new String( c );
      }
      catch (Exception e) 
      {
    System.out.println(e.toString());
    return src;
      }
    }
    %>
    <%
    list = download_obj.getFilePath(request.getParameter("fileid"));
    downloadpath = (String)list.get(1);
    BufferedInputStream bis=null;
    BufferedOutputStream bos=null;
        String path=request.getRealPath("/");
        response.setHeader("content-disposition","attachment;filename="+convertFileName((String)list.get(0)));
    try{
    bis=new BufferedInputStream(new FileInputStream(path+"\\"+downloadpath));
     response.setContentType("text/html;charset=GB2312"); 
     bos=new BufferedOutputStream(response.getOutputStream());
     byte []bt=new byte[2048];
     int n;
     while((n=bis.read(bt,0,bt.length))!=-1){
    bos.write(bt,0,n);
     }
     bis.close();
         bos.close();
     }
    catch(IOException ex){
        ex.printStackTrace();
    }
    %>
      

  2.   

    是由于 jspSmartUpload 组件对中文的支持不足,楼主可以先试试楼上的方法,还不行就在jspSmartUpload加入
    public static String toUtf8String(String s) {
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < s.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();
        }然后改写downloadFile,
    toUtf8String(getFileName(sourceFilePathName)))));
    append(toUtf8String(destFileName))));
    加入这个方法过滤
      

  3.   


    ----------------------------------------------------------------
    原贴内容:
    能说的详细一点吗 ?
     谢谢是这样:
         你首先要把得到的 jspSmartUpload 包里所有的 class 类反编译成 java 源代码,
    然后放到诸如 jb 一类的工具里专门建立一个 jspSmartUpload 的 package,首先使得编译整个的 jspSmartUpload 包路径可以通过(可能需要先注释掉部分 java 代码,因为这些类互相嵌套编译,从依赖性最小的开始编译,知道全部通过)接下去,打开 SmartUpload 这个类,里面有4个 downloadFile 的方法,找到代码最长的那个。先把我给你的那个 toUtf8String 方法新增到这个 SmartUpload 类中,然后在 downloadFile 找到如下两处代码:
    1、getFileName(sourceFilePathName)
    2、append(destFileName)分别加入 toUtf8String 方法过滤成如下:
    1、toUtf8String(getFileName(sourceFilePathName))
    2、toUtf8String(destFileName))最后,重新编译该类,然后,将整个的 jspSmartUpload 重新打包成rar文件,放入tomcat 的 classpath,这样应该就可以使用了。谢谢