访问请求的时候遇到了中文字符,最终找不到页面、指定请求和文件的中文请求乱码问题

项目场景:

在访问请求的时候遇到了中文字符,最终找不到页面、指定请求和文件的中文请求乱码问题


# 问题描述:

访问请求时因为请求了中文文件路径,在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"/>
上一篇:腾讯视频下载转mp4_腾讯视频如何上传自己的视频


下一篇:如何使用VideoProc将MKV转换为MP4?