您的当前位置:首页正文

有关乱码的解决方法

2024-05-23 来源:年旅网
有关乱码的解决方法

近日,由于项目中使用的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格式。

因篇幅问题不能全部显示,请点此查看更多更全内容