1.1 熟悉Web应用程序中与编码相关的部分
- JSP编译
- 指定文件的存储编码,很明显。该设置应该位于文件的开头:
<%@page pageEncoding="UTF-8" %>- 另外对于一般的class文件,可以在编译的时候指定编码。
- JSP输出
- 指定文件输出到Browser时的使用的编码,该设置也应该设置在文件的开头。
<%@page contentType="text/html;charset=UTF8" %>- 该设置与
response.setCharacterEncoding("GBK");等效- META设置
- 指定网页使用的编码,该设置对静态网页尤其有用,因为静态网页无法使用采用JSP的设置而且也无法执行
response.setCharacterEncoding("UTF-8");例如:<meta http-equiv="Content-Type" contentType="text/html;charset=UTF-8"/>- 注意:如果同时采用了JSP输出和meta设置两种编码指定方式,那么JSP指定的优先。因为JSP指定的直接体现在Response中。
- Form设置
- 当浏览器提交表单时,可以指定相应的编码,例如:
<form accept-charset="UTF-8"></form>一般不需要设置,浏览器会直接使用网页的编码
1.2 熟悉Web应用程序产生中文乱码的原因
JSP页面被编译成class文件时,如果未指定字符集时,默认使用ISO-8859-1的编码格式,这样中文会出现乱码。- 提交表单时如果设定提交方式为
Post而没有设置提交的编码的格式,则会以ISO-8859-1方式提交,而接收的JSP却以UTF-8的方式接收,这样也会导致中文乱码。- 提交表单时如果设定提交方式为
Get而没有设置提交的编码的格式,Tomcat会以GET的默认编码格式ISO8859-1对汉字进行编码,编码后追加到URL,导致接收页面得到的参数为乱码。
1.3 解决中文乱码
- 设置文件本身的编码格式。这可以在
Eclipse或MyEclipse中进行设置。- 在
JSP页面中指定字符集,通常页面字符集的设置如下:
1 | <%@ page contentType="text/html;charset=UTF-8" %> |
- 数据库连接时指定的字符集。
1 | String url="jdbc:msqyl://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8" |
- 在程序中获取页面数据时使用如下代码
1 | response.setContentType("text/html;charset=UTF-8"); |
注意:
- 如果需要将中文作为参数传递,需要在传递和接受时进行相应的处理、具体方法如下所示:
- 在传递参数时对参数编码 :
"...RearshRes.jsp?keywords="+java.net.URLEncoder.encode(keywords) - 然后在接收参数页面中使用如下语句接收
keywords=new String(request.getParameter("keywords").getBytes("ISO-8859-1"))
- 在传递参数时对参数编码 :