JSP页面中包含中文乱码的问题大致可分为三方面,即客户端、服务器端和数据库。
导致此问题的原因可能有以下两点:
首先Java(包括JSP)源文件中很可能包含有中文;
第二类乱码,即Java程序与其他存储媒介交互时产生的乱码。很多存储媒介,如数据
库,文件,流等的存储方式都是基于字节流的,Java程序与这些媒介交互时就会发生
字符(char)与字节(byte)之间的转换,如果在转换过程中使用的编码方式与字节原有的编码不一致,即编码和解码无法一一匹配,就很可能出现乱码。
通过最近收集的资料和老师的讲解,将此问题的解决方法分为以下的几点。
客户端:
1.输入的解码
(1)当客户端(一般是浏览器)接收服务器发回的响应(HTML页面)后,对其进行解码,此时若出现乱码则可以在浏览器的查看中强制设置编码方式为GBK或者GB1312。
(2)在头文件中定义编码类型,response.setContentType("text/html; charset=GBK")或者前端html代码中的”meta content”(i.e. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />)。
2.输出的编码
(1)URL编码
a. IE/FF在参数部分使用本机编码,GBK(os默认)
b.参数的前面部分,FF中GBK是os默认,IE中可在IE选项中的高级里设置使用utf-8发送URL
(2)post的编码(提交Form表单数据)
前端html代码中的”meta content”(i.e. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />)。
服务器:
1.输入的解码
(1)通过post提交时,JSP转换成java代码时,有的服务器默认是ISO-8859-1,此
一旦有中文则会出现乱码,解决方法是在JSP编码的地方设置<%@ page contentType="text/html;charset=GBK>,或者request.setCharacterEncoding("GBK")方法
(2)URL encode
对字符串进行强制转码 ,对含有汉字字符的信息进行处理
new String(request.getParameter("name").getBytes("iso-8859-1"),"GBK")
或者在tomacat中进行配置,在server.xml文件中
<Connector port="8080" protocol="HTTP/1.1" maxThreads="150"connectionTimeout="20000" redirectPort="8443" URIEncoding="GBK"/>
2.输出的编码
拿tomacat来举例,我不知道如果在它的xml文件下设置URIEncoding="GBK",是否仅仅是设置了解码的方式为中文。按我的理解,tomacat在设置编码方式的时候并不是将解码和编码严格的划分开来,但是它在解码的同时是否也一并设置了输出编码的方式,仍然不是十分清楚。