renderFile下载文件中文乱码问题2

image.png

就是这一行代码,如果文件名是中文,就会乱码,数字和英文就不会,这是FileRender类中的encodeFileName方法

评论区

JFinal

2019-11-13 14:54

这行代码只是第一步,后面还有一些 if 判断,你需要继续往下调试,看到底是哪行代码出的问题

smileForLife

2019-11-13 15:01

@JFinal 我确定就是这一行,因为该段代码返回的返回值就是最后乱码的结果

JFinal

2019-11-13 15:03

@smileForLife 用的哪个版本的 jfinal ?

smileForLife

2019-11-13 15:05

JFinal

2019-11-13 15:19

@smileForLife 4.5 之前早就解决过中文下载文件名问题

我估计是你的中文文件名的使用的 encodeing 不是 UTF-8 造成的

你的项目配置的是什么 encoding,这个在 me.setEncoding(...) 中配置

此外,你还可以通过如下办法解决一下:
1:做一个 MyRender extends FileRender {...}
2:覆盖 public String encodeFileName(HttpServletRequest request, String fileName) 方法
在这个方法里头正确进行编码
3:然后这么来使用: render(new MyRender(fileName));

smileForLife

2019-11-13 16:34

@JFinal 波总,实不相瞒,这些方法我都试过了,然后刚刚又去试了一遍,用 me.setEncoding("UTF-8")或者("GBK")都是没有作用的,复写下载出来了一个叫做repons.bin的文件............

smileForLife

2019-11-13 16:35

@JFinal 搞了一天了这个问题......

JFinal

2019-11-13 16:39

@smileForLife 下载文件为啥一定要使用中文名呢?

用上 render( oldFileName , 新名字) 这个方法,可以任意指定下载名称,不一定要是中文文件名

JFinal

2019-11-13 16:40

这个问题我也觉得很奇怪,因为好几年前就解决过的中文文件名问题

可能是你的环境有所不同,客户端之类的可能不同

smileForLife

2019-11-13 17:30

@JFinal 确实,我突然发现用浏览器下是ok的,之前使用的postman测的...

smileForLife

2019-11-13 17:31

@JFinal 感谢波总

年轻人

2020-03-25 17:51

我也遇到了,确实跟postman有关系,在postman下中文文件名有问题,浏览器下正常