Java文件名乱码问题

`
现在我有一个这个下载文件的代码,但是下载下来的文件名乱码了

这种现象是正确的。 另外代码filename=" + URLEncoder.encode(fileName, "UTF-8")也不用改动,因为utf-8是使用频繁的编码。题主的显示乱码是因为下载windows本地,windowss本地的编码导致的乱码。 唯一需要改动的是前端代码根据获取的filename进行解码就好使用解码DecodeURI。

若有帮助,记得采纳哦。

URLEncoder.encode 是对字符串转码。
解码需要用URLDecoder.decode

文件名乱码的问题可能是由于编码格式不一致导致的。您当前使用的是UTF-8编码格式,而文件名可能是其他格式。


有几种方法来解决文件名乱码问题:

  • 您可以尝试使用 ISO-8859-1 或 GB2312 编码来替换 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这类东西下载的中文文件名才是你这羊的