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下中文文件名有问题,浏览器下正常

koushoha1893

2020-08-21 10:15

@JFinal 波总,自定义了一个MyFileRender,然后使用render(new MyFileRender()进行下载时,总是抛出异常RenderException,请问这是什么问题呢?

JFinal

2020-08-21 10:33

@koushoha1893 根据异常提示的内容去解决,猜是不行的

koushoha1893

2020-08-21 10:53

@JFinal 提示内容为:com.jfinal.render.RenderException: org.apache.catalina.connector.ClientAbortException: java.net.SocketException: Software caused connection abort: socket write error 请波总指导下(顺便说一下,下载是正常的,只是有报错日志)