乱码的根本原因:
保存时的编码 和解析时(解码)采用了不同的字符编码,而每种字符编码采用了不同的编码规则。
- 编码:将字符转换成二进制字节流。
- 解码:将二进制字节流转换为字符。
- 字符集:ASCII字符集、GB2312字符集、Unicode字符集(包含多种字符编码:UTF-8,UTF-16等)、BIG5字符集、 GB18030字符集等。
- 常见的字符编码:GBK、GB2312 (早期)、UTF-8、ISO-8859-1、ASCII等。
所以解决乱码的方法:
统一开发工具、Tomcat、浏览器、xml、数据库、HTML页面、JSP页面等默认的字符编码
下面是常见的几种乱码类型:
1.开发环境乱码
由于Java默认使用UTF-8编码,而且网上很多人都建议Struts开发的时候应尽量选用UTF-8做为默认编码,而非GBK。IDE使 用Eclipse,在第一次使用Eclipse的时候应将default text editor改为UTF-8编码。
特别是Java开发的,推荐从页面到数据库再到配置文件都使用UTF-8进行编码,安全第一。
2.POST请求的过滤
这个是最基本的了,每个Servlet系统基本都会用到这个东西。不过只对POST请求有效,这个挺关键的。使用 SetCharacterEncodingFilter,这个很基础的一套过滤器,将所有来自页面的POST请求全部过滤为UTF-8编码。
3. JSP 页面乱码
将JSP页面全部改为charset=UTF-8,这样可以保证与后台交互的时候都是UTF-8编码,一般应用做了以上工作就基本可以应付了。
4.资源文件中汉字转化UTF-8字符问题
国际化问题,在使用资源文件的时候,由于中文在properties文件中无法被程序所识别,需要将其进行转码,我在资源文件下面制作了一个很简单的 bat文件,每次修改资源文件的时候都是在一个临时文件中修改,然后执行这个bat文件,将其转化并保存为所需要的资源文件。
5. GET请求乱码
如果在本项目中采用了get方式提交请求并附加参数,结果导致编码乱码,原因是Tomcat默认请求编码是ISO8859,需要在Tomcat的配置文件 server.xml添加一个参数,URIEncoding=”UTF-8”,这样请求中附件的参数就会以UTF-8来进行编码。