项目场景:
在访问请求的时候遇到了中文字符,最终找不到页面、指定请求和文件的中文请求乱码问题
# 问题描述:
访问请求时因为请求了中文文件路径,在Tomcat中无法识别realPath,编码不一致
导致实际的请求连接为
http://localhost:8080/day15_fileUploadAndDownload/FileDownLoadDemo?fileName=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C.mp4
在浏览器中显示的路径为
HTTP Status 500 - C:\Users\yl\eclipse-workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\day15_fileUploadAndDownload\WEB-INF\download\é”å
½ä¸–ç•Œ.mp4
java.io.FileNotFoundException: C:\Users\yl\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\day15_fileUploadAndDownload\WEB-INF\download\é”å
½ä¸–ç•Œ.mp4 (系统找不到指定的文件。)
原因分析:
实际的原因为get请求中,请求的文件名(参数)是由Tomcat读取的
tomcat7中
apache-tomcat-7.0.88/webapps/docs/config/http.html
This specifies the character encoding used to decode the URI bytes,
after %xx decoding the URL. If not specified, ISO-8859-1 will be used.
默认使用了ISO-8859-1编码
tomcat会对解析出的URL进行重新编码以便servlet重新识别
而读取文件名的时候servlet设置了UTF-8编码,按UTF-8编码读取文件名(参数),实际为get请求乱码问题。
解决方案:
在服务器的配置xml中,在
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
这行代码中添加URIEncoding编码格式
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>