String downloadfile = URLEncoder.encode(filepath,"UTF-8");
response.addHeader("Content-Disposition","attachment;filename=" + downloadfile );
乱码就是乱在;filename=" + downloadfile 这里,对文件名的编码设定上。
使用URLEncoder.encode(filepath,"UTF-8")虽然可以解决在提示下载框中正确显示汉字文件名的问题,并且在选择保存,然后打开的情况下,文件名称也可以正确的显示。
但是在提示下载框中,选择直接打开,则文件名称变成了类似“%E7%BB%99%E7%94%A8%E6%88%B7%E6%8F%90%E4%BE%9B%E7%9A%84%E4%B8%8B%E8%BD%BD%E6%96%87%E4%BB%B6%E5%90%8D”的样子。
为了解决这个问题,最后采用了如下代码:
String downloadfile = new String(filepath.getBytes("gb2312"),"iso8859-1");
response.addHeader("Content-Disposition","attachment;filename=" + downloadfile );
虽然在debug模式下,我们会发现downloadfile在被编码成iso8859-1后,值变成了“。。。。.xls”这样的乱码,但是在下载时,显示是一切正常的。