服务器上的一个中文文件名的文件,我写了一个程序来下载: response.setHeader("Content-Disposition", "attachment; filename=" + toUtf8(fileName));
response.setContentType("application/octet-stream");
测试的时候,IE会弹出对话框并有三个按钮:“[打开]、[保存]、[取消]”。点保存的话,文件名没有任何问题,没有乱码。
如果点打开,则会说文件名不对,因为文件名全是%E4%8F...%6F.xls。
我感觉好像直接打开的话,文件名的utf-8编码没有转成合适的编码。

解决方案 »

  1.   

    文件名应该是加密过的了,你必须解密回来,因为如果文件名中文的话,http发送会有错误,所以一般把文件名加密.
      

  2.   

    看错了,以为是httpclient传送数据. 
    建议调试一下 filename 及 toUtf8(fileName) 的值. 
    特别是toUtf8函数的代码,可能对文件名加密了.
      

  3.   

    toUtf8 应该是自己写的函数吧?
      

  4.   

    fileName = URLEncoder.encode(fileName, "UTF-8");//用这个控制文件名的乱码问题response.setContentType("application/x-msdownload;charset=UTF-8");
    response.setHeader("Content-Disposition", "attachment; filename="
    + fileName);这么写头试试