近日,由于项目中使用的js和附件上传功能出现了中文无法正常显示、传递等问题,因此,对页面编码集设置进行了简单的试验,并依据试验结果规定编码集设置规范。
一、问题背景
1、 在开发过程中,首先发现了某些js的中文内容无法在eclipse中显示的情况。此类js的
格式为utf-8,而非默认的编码格式gbk,故将js编码改为gbk。
2、 后来发现js中的中文在页面中显示为乱码,此时jsp页面的charset是utf-8,故将jsp的
charset改成gbk了。
3、 由于页面改成了gbk,但过滤器配置的是utf-8,所以在实现附件上传的时候,发现中文
路径和文件名又变成了乱码,故将过滤器改成了gbk。
4、 将过滤器改为gbk之后,发现ext提交时后台获取的中文变成了乱码,导致很多页面不
可用。
二、问题分析
根据问题产生的情况,可知问题是由于ext提交时的编码集与gbk编码过滤器冲突的问题。 加入struts源码,后台ActionServlet加断点,得知:
普通提交: contentType \"application/x-www-form-urlencoded\" ,inputEncoding ext查询: contentType \"application/x-www-form-urlencoded\" ,inputEncoding
\"GBK\" \"GBK\"
ext form提交: contentType \"application/x-www-form-urlencoded\" ,inputEncoding
\"GBK\" ,form中文乱码
\"multipart/form-data;
\"GBK\"
,form中文乱
ext form提交附件:contentType
boundary=---------------------------7da1f41c10898\" ,inputEncoding 码,附件名乱码
直接访问:contentType null , inputEncoding \"GBK\"
此时全是gbk了,因为已经经过过滤器过滤了。
在过滤器里加断点:
普通提交:inputEncoding null ext查询:inputEncoding null
ext form提交:inputEncoding null form中文乱码
ext form提交附件:inputEncoding null form中文乱码,附件名乱码 直接访问:inputEncoding null
可见,ext提交的编码集没有指定,但猜测是utf-8的,经过gbk的过滤器,就得到乱码了。
又对其他的一些方面进行了分析,得知在下列设置时,系统可以正常使用:
js中文 页面gbk css 页面utf-8
js提交 过滤器utf-8,过滤器和页面设置一致 普通提交 过滤器和页面设置一致
由此可以发现,js文件应使用utf-8格式的显示中文,则可以全部使用utf-8的编码集,解决乱码问题。
三、问题的解决
用eclipse将有中文的js转换为utf-8格式的。
转换之后,文件中的中文会变乱码,需要重新写一遍。
Jsp页面使用utf-8编码格式
Web.xml的过滤器使用utf-8格式。
因篇幅问题不能全部显示,请点此查看更多更全内容