解决中文乱码

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 解决中文乱码

  • 设置文件本身的编码格式。这可以在EclipseMyEclipse中进行设置。
  • JSP页面中指定字符集,通常页面字符集的设置如下:
1
2
3
4
5
6
7
<%@ page contentType="text/html;charset=UTF-8"  %>
<html>
<head>
<meta http-equiv="Content-Type" contentType="text/html;charset=UTF8"/>
<title>字符集设置联系</title>
</head>
</html>
  • 数据库连接时指定的字符集。
1
String url="jdbc:msqyl://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8"
  • 在程序中获取页面数据时使用如下代码
1
2
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");

注意:

  • 如果需要将中文作为参数传递,需要在传递和接受时进行相应的处理、具体方法如下所示:
    • 在传递参数时对参数编码 : "...RearshRes.jsp?keywords="+java.net.URLEncoder.encode(keywords)
    • 然后在接收参数页面中使用如下语句接收 keywords=new String(request.getParameter("keywords").getBytes("ISO-8859-1"))