解决swfupload上传文件后,点击文件下载时,文件名出现中文乱码问题

由于同事离职需要接手一个开发进10年的struts项目,遇到了经典的中文乱码问题。
好好的项目,怎么到了我的手里,上传文件就变成乱码了呢?
仔细想想,排除了项目文件编码设置的情况,肯定是因为环境问题。
对比了生产环境,结果发现tomcat配置不一样。

这里先po出解决方案:

在tomcat/conf/server.xml文件中,将Connector添加如下两项配置URIEncoding和useBodyEncodingForURI。


至于这两个配置的含义可以百度,大概意思如下:

URIEncoding:对URI中出现的中文进行decode,解决X.do找不到执行类的问题。

useBodyEncodingForURI:解决queryString参数的乱码问题。我的问题就是这个啦

上述两个配置不指定,默认值为ISO-8859-1

具体情况分析:

1.调试前台js代码从uploadstart()直到上传成功,文件名显示正常,页面中文名链接渲染正常,说明问题不在js前端;
2.请求跳转到后台Action后直接从request中拿到的filename就已经是乱码,并且基类中已经设置request.setCharacterEncoding("UTF-8");说明后台就是拿UTF-8去解析参数的,没有问题;
3.中文乱码使用new String(fid.getBytes("ISO-8859-1"),"UTF-8")测试才为正常中文名称,说明中间被什么中间件给转成万恶的ISO-8859-1了,事实上,就是tomcat!

心得体会:

代码问题不大的话,优先检查环境!

你可能感兴趣的:(解决swfupload上传文件后,点击文件下载时,文件名出现中文乱码问题)