为了解决浏览器中文件下载时中文名称的乱码问题,可以在前端页面发送请求前先对中文名进行统一编码,然后在后台控制器类中对文件名称进行相应的转码,其具体实现步骤如下。
在下载页面中对中文文件名编码。可以使用Servlet API中提供的URLEncoder类中的encoder(String s, String enc)方法将中文转为UTF-8编码
在控制器类中增加对文件名进行编码的方法,其代码如下所示。
在方法getFilename()中,由于IE浏览器在文件编码上与其他浏览器的方式不同,所以在中文编码设置上IE浏览器设置为UTF-8编码,而火狐等其他浏览器设置为ISO-8859-1编码。另外由于不同版本的IE浏览器,请求代理User-Agent中的关键字也略有不同,所以在判断IE浏览器时,需要特别注意User-Agent中的关键字。
再次测试下载,文件名中文显示正常