讨论区 » AAS-V10企业版 »
应用附件下载的功能,下载后原中文名丢失的问题(原文件名里有中文.xxx,下载后就变成空格.xxx )
由 huang junrui 在 超过 3 年 之前添加
异常信息:应用附件下载的功能,下载后原中文名丢失的问题(原文件名里有中文.xxx,下载后就变成空格.xxx ),后台日志不报错
版本号:202106101338
解决时间:2021-9-7
解决方案:JVM 参数加上 -Dapusic.skipCheckPrintableUsAscii=true (注意空格,别写成 -Dapusic.skipCheckPrintableUsAscii = true),并重启V10,如果还不行,替换附件中的 ApusicAs/aas/modules/aas-nucleus-grizzly-all.jar 包,保留加上的jvm参数再重启V10
界面现象:
日志截图:
解决操作:
回复 (1)
RE: 应用附件下载的功能,下载后原中文名丢失的问题(原文件名里有中文.xxx,下载后就变成空格.xxx ) - 由 she sh 在 超过 3 年 之前添加
补充说明:
上述解决方案解决了在aas10不过滤header里的非法字符。
但是浏览器上还是可能出现带中文的文件名显示乱码得问题。原因在于应用一般都是沿用tomcat上的写法:
String str6 = new String(f.getName().getBytes("utf-8"),"iso-8859-1"); //将文件名先编码成utf-8 然后解码成iso-8859-1 headers.add("Content-Disposition", "attachment;filename="+ str4); //写入header
这种写法不是标准写法,恰巧利用了iso-8859-1单字节的特性,有的浏览器默认是用iso-8859-1解码的,所以可以正常显示。对于浏览器的兼容性不是很好。
建议在构造附件response时采用以下标准写法:
String str4=java.net.URLEncoder.encode(f.getName(), "UTF-8").replace("+", "%20"); //先进行urlencoding
headers.add("Content-Disposition", "attachment;filename=" + str4+ ";filename*=utf-8''" +str4); //header里用对浏览器兼容性更好的写法