`
现在我有一个这个下载文件的代码,但是下载下来的文件名乱码了
这种现象是正确的。 另外代码filename=" + URLEncoder.encode(fileName, "UTF-8")也不用改动,因为utf-8是使用频繁的编码。题主的显示乱码是因为下载windows本地,windowss本地的编码导致的乱码。 唯一需要改动的是前端代码根据获取的filename进行解码就好使用解码DecodeURI。
若有帮助,记得采纳哦。
URLEncoder.encode 是对字符串转码。
解码需要用URLDecoder.decode
文件名乱码的问题可能是由于编码格式不一致导致的。您当前使用的是UTF-8编码格式,而文件名可能是其他格式。
有几种方法来解决文件名乱码问题:
response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("gbk"), "iso-8859-1"));
使用文件名的编码来解决问题,需要知道文件名的编码格式。
response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("fileNameEncoding"), "iso-8859-1"));
使用 apache commons-io 或类似的库来解决问题
String fileName = URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + FilenameUtils.normalize(fileName, true));
具体哪个方法能解决问题取决于系统环境和文件名编码格式,你可以多尝试。
是直接用浏览器下载的,还是通过类似swagger这些东西下的,swagger这类东西下载的中文文件名才是你这羊的