在 Ext 的使用过程中,一不留心就出现了乱码,包括在客户端提交给服务器的数据中出现了乱码和服务器端返回给客户端的数据中出现了乱码,下面简单分析一下出现乱码的原因。
在一次页面浏览过程中,客户端对一个 URL 发起浏览请求,服务端针对这次请求进行解析,而在字符编码解析方面,首先他检查该页面中的字符编码设置,即 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ,这样,在页面中显示声明了字符编码为 UTF-8 ,服务器就会将该页面用 UTF-8 的编码输出,而如果页面中没有显示声明,在服务器中都有一个默认的字符编码,比如 GB2312 ,针对没有声明的文件,他会用默认编码输出,这个时候,如果页面输出又是 UTF-8 ,这样就会出现乱码。
而在 Ext 中的提交数据的过程中, Ext 框架用的是都是 UTF-8 编码,而且通过 JSON 提交的数据也是 UTF-8 编码,所以要求所有的文件都是 UTF-8 编码。
解决乱码的方法
以下几项首先必须要在平时的编码过程中做到:
(1) JAVA 后台文件加入
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
(2) 在文件中显示声明字符编码,
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
( 3 )对于提交中出现的乱码,在 Ext 中可以修改 Request Header 中 Content-Type 的设置,具体的方法为: Ext.lib.Ajax.defaultPostHeader += ";charset=utf-8";
最后,问题还可能出现在文件的保存格式上。就是你把代码文件保存的时候,如果开发环境默认保存的不是 UTF-8 格式,那么也会出现问题! 所以就要对开发环境也有一个要求。
开发环境的配置
如果采用记事本来编写保存代码文件( .js ),那这个就会出问题,主要是由于在 windows 系统里记事本默认的编码格式是 ANSI ,这样基本上和目前网页中编码的格式都不同因此就会出现编码格式不正确的问题。解决办法就是打开 xx.js 文件然后另存为,在保存类型处选择 utf-8 编码格式就可以了。
当然 , 主流还是使用 MyEclipse ,所以说一下 MyEclipse8.5 及以上版本里要配置哪些地方。
1.Preferences->General->Content Types 选中 Text 编辑下面的 Default encoding 为 utf-8 然后 Update 。
2.Preferences->General ->Editors->Text Editors->Spelling 下 Encoding 选 Default(UTF-8)
3.Preferences->General ->Workspace 下 Text File Encoding 选 Other: UTF-8
最后如果还出现乱码 , 利用
System.out.print(request.getCharacterEncoding());
System.out.print(response.getCharacterEncoding());
察看 request 或 response 编码是否不是 utf-8
若不是 , 利用 web.xml 中的 filter 解决 .
如
<filter>
<description>no</description>
<display-name>EncodingFilter</display-name>
<filter-name>EncodingFilter</filter-name>
<filter-class>
com.hope.filters.SetCharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
或者设置
<globalization responseEncoding="utf-8" fileEncoding="utf-8" requestEncoding="utf-8"/>