关于springMVC下请求中文资源问题,很急,项目和firebug都没有显示乱码,大神求破!

时间:2021-03-06 20:08:39
前提:小弟使用SpringMVC+spring+hibernate建起一个网站,并没有乱码哈用拦截器统一了编码,我注册时允许中文注册,并且数据库为正常utf8编码,使用中文用户名登录也没问题。

但是有人上传了一张中文名称图片:经过controller我打印文件名正常显示,写入数据库后也正常
48 other pic  userPic/爱的棉花糖.jpg 0
49 other pic  userPic/win7.jpg 0

在controller中的showPic方法从数据库获取的list中也没乱码:
/static/userPic/win7.png,
 /static/userPic/爱的棉花糖win7.jpg

然后我用jstl将其循环写入页面英文名开头的照片统统正常显示,中文的找不到路径,
<c:forEach items="${picmap.value}" var="picPath">
<li><img src='<c:url value="${picPath}"></c:url>'
class="thumbnail"></li>
</c:forEach>

项目并没有报错,也没有不正常,就是中文资源获取不到,英文名的照片能够正常获取到。怎么破?

补充:我的/static/userPic/是上传图片文件夹,上传的文件无论中英文均正常命名,文件也没有损坏,我做了一些尝试,我的/static/userPic/中上传了两张图片:win7.png和惠普.png,均没有损坏我的静态资源访问控制也正常:
直接访问http://localhost:8080/yuntu/static/userPic/win7.png可以显示图片
直接访问http://localhost:8080/yuntu/static/userPic/惠普.png找不到资源

这种怎么破,或者大神给我提供思路可好

14 个解决方案

#1


别沉啊,大婶求破 关于springMVC下请求中文资源问题,很急,项目和firebug都没有显示乱码,大神求破!

#2


http协议不允许中文连接的。都会转码的。无解,正常的办法都是采用英文的。

#3


引用 2 楼 w3226327 的回复:
http协议不允许中文连接的。都会转码的。无解,正常的办法都是采用英文的。


可是很多人都会上传中文名称图片,给个解决思路呗

#4


求不沉,大神求解,给个折中方案就好

#5


引用 4 楼 hc334521 的回复:
求不沉,大神求解,给个折中方案就好

他们那是给了中文名称字段,在下载的时候再取中文名称下载,存下来的文件还是英文的

#6


我也遇到了同样的问题.   目前所有带中文的资源全都访问不到,包括自己上传的文件,下载也不行. 我做过encodeuri的转码试验也是不能下载.这应该是spring mvc的一个bug吧.

#7


配置Tomcat下conf/Server.xml,在里面Http的Connector中加上URIEncoding=”UTF-8“。
如下面所示:

<Connector URIEncoding="UTF-8" connectionTimeout="20000" executor="tomcatThreadPool" port="80" protocol="HTTP/1.1" redirectPort="8443"/>

#8


还是用代码转码吧。这跟浏览器发送的请求有关,所以必须转。中文很危险的。如果有可能还是把上传的文件名转成英文比较好

#9


文件名弄两部分,一部分是给人看的用中文,一部分是程序用的不用中文!

#10


你图片文件上传是怎么搞的,ajax还是普通form

#11


相当于get请求请求服务器资源了,之所以请请求不到是因为,页面将中文base64后,服务器解码时所用编码不一致。
需要在tomcat中设置Connector  URIEncoding为utf-8   注:这个utf-8编码不一定是你项目的编码,主要看当前浏览器对于页面的编码,一般与页面的meta 中的charset 一致。 如果不写meta,默认chrome为utf-8 ,IE为gbk。 

#12


httpHeaders.add("Content-Disposition", "attachment;filename=" + new String(file.getBytes("utf-8"),"iso-8859-1"));

#13


pinyin4j转换成拼音呗

#14


引用 12 楼 newbeginners 的回复:
httpHeaders.add("Content-Disposition", "attachment;filename=" + new String(file.getBytes("utf-8"),"iso-8859-1"));

正解,下载的时候需要iso-8859-1就会显示中文文件名了

#1


别沉啊,大婶求破 关于springMVC下请求中文资源问题,很急,项目和firebug都没有显示乱码,大神求破!

#2


http协议不允许中文连接的。都会转码的。无解,正常的办法都是采用英文的。

#3


引用 2 楼 w3226327 的回复:
http协议不允许中文连接的。都会转码的。无解,正常的办法都是采用英文的。


可是很多人都会上传中文名称图片,给个解决思路呗

#4


求不沉,大神求解,给个折中方案就好

#5


引用 4 楼 hc334521 的回复:
求不沉,大神求解,给个折中方案就好

他们那是给了中文名称字段,在下载的时候再取中文名称下载,存下来的文件还是英文的

#6


我也遇到了同样的问题.   目前所有带中文的资源全都访问不到,包括自己上传的文件,下载也不行. 我做过encodeuri的转码试验也是不能下载.这应该是spring mvc的一个bug吧.

#7


配置Tomcat下conf/Server.xml,在里面Http的Connector中加上URIEncoding=”UTF-8“。
如下面所示:

<Connector URIEncoding="UTF-8" connectionTimeout="20000" executor="tomcatThreadPool" port="80" protocol="HTTP/1.1" redirectPort="8443"/>

#8


还是用代码转码吧。这跟浏览器发送的请求有关,所以必须转。中文很危险的。如果有可能还是把上传的文件名转成英文比较好

#9


文件名弄两部分,一部分是给人看的用中文,一部分是程序用的不用中文!

#10


你图片文件上传是怎么搞的,ajax还是普通form

#11


相当于get请求请求服务器资源了,之所以请请求不到是因为,页面将中文base64后,服务器解码时所用编码不一致。
需要在tomcat中设置Connector  URIEncoding为utf-8   注:这个utf-8编码不一定是你项目的编码,主要看当前浏览器对于页面的编码,一般与页面的meta 中的charset 一致。 如果不写meta,默认chrome为utf-8 ,IE为gbk。 

#12


httpHeaders.add("Content-Disposition", "attachment;filename=" + new String(file.getBytes("utf-8"),"iso-8859-1"));

#13


pinyin4j转换成拼音呗

#14


引用 12 楼 newbeginners 的回复:
httpHeaders.add("Content-Disposition", "attachment;filename=" + new String(file.getBytes("utf-8"),"iso-8859-1"));

正解,下载的时候需要iso-8859-1就会显示中文文件名了