乱码问题总结

一、页面乱码问题

<%@ page language="java" contentType="text/html; charset=iso8859-1"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>乱码问题</title>
</head>
<body>
<h3>这里是首页。。。</h3>
</body>
</html>

 

注:

1)page language="java"   pageEncoding="UTF-8"  :这里的"UTF-8"指的是jsp文件的存储格式。Eclipse会根据这个编码格式保存文件。并编译jsp文件,包括里面的汉字。

2)contentType="text/html; charset=iso8859-1" :这里的“iso8859-1指的是解码格式。默认的是“iso8859-1”,当存储格式为“UTF-8”的文件用“iso8859”进行解码时,自然会出现乱码。

3)<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> :这里的“UTF-8指的是浏览器的解码格式。当前两种格式一致时,这里的格式便显得无关紧要了。存在的问题是,当一个页面嵌入另一个页面时,浏览器不能确认使用哪种解码格式,会出现乱码。

解决方式:将所有的编码,全部设置为“UTF-8”格式,彻底解决此种情况的乱码问题。

 

 

二、Post 方式提交表单出现的乱码问题。

 

1、问题背景:Tomcat 内部默认的编码格式为“iso8859-1”,以post方式提交表单时,如果没有设置提交的编码格式,则会以“iso8859-1”格式进行提交,接收参数时,却以“UTF-8”格式接收,就会出现乱码问题。

2、解决方式。

1)接收参数时,进行编码转换。如:

       String userName= new String(request.getParameter("userName").getBytes("ISO-8859-1"),"utf-8")

2)在接收参数开始处,设置请求的编码。

       request.setCharacterEncoding("UTF-8")

3)使用过滤器对所有的jsp进行处理。在web.xml 中加入过滤器:

 

 

<filter>
  <filter-name>Set Character Encoding</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
  </init-param>
 </filter>

            <filter-mapping>
            <filter-name>Set Character Encoding</filter-name>
            <url-pattern>/*</url-pattern>
 </filter-mapping>

 

 三、Get 方式提交表单出现的问题。

1、问题背景:Tomcat 内部默认的编码格式为“iso8859-1”,以get方式提交表单时,Tomcat 以“iso8859-1”对汉字进行编码,编码后追加到url。

 

 

接收参数时以“UTF-8”格式进行接收出现乱码。

2、解决方式:

1)接收参数时,进行编码转换。如:

       String userName= new String(request.getParameter("userName").getBytes("ISO-8859-1"),"utf-8")

先以“ISO-88591-1”格式进行解码,然后以“UTF-8”方式进行编码。

2)修改Tomcat服务器配置server.xml文件中对HTTP协议的 Connector配置。

< Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000" 
disableUploadTimeout="true" URIEncoding="UTF-8" /> 

 

 

四、数据库访问时的乱码问题(本段 摘录
在使用JDBC连接MySQL数据库时,连接字符串写成如下形式可以避免一些中文问题:
  
jdbc://mysql://hostname:port/DBname?user=username&password=pwd&useUnicode=true&characterEncoding=utf-8
如果是以数据源的方式连接数据库,在配置文件中使用:

<parameter>
      <name>url</name>
      <value>jdbc:mysql://hostname:port/DBname?&useUnicode=true&characterEncoding=utf-8</value>
</parameter>

 如果使用一个已存在的数据库,数据库的编码方式为ISO-8859-1,而Web应用中是utf-8,且数据库中已有很多重要的信息,因此不能通过更改数据库编码方式来解决问题。这时,在往数据库中写数据时,一定要在JDBC连接字符串中加入"useUnicode=true&characterEncoding=ISO-8859-1",这样就可以顺利往数据库写入正常的数据。但是,在将数据读出数据库时,乱码又会出现,这时就应该在数据取出时对其转码,可以将转吗功能写为一个函数,具体实现如下:

public String charConvert(String src){
    Stringresult=null;
   if(src!=null){
       try{
           result = newString(src.getBytes("ISO-8859-1"),"utf-8");
         }catch(Exception e){
          result = null;
          }
    }
     returnresult;
}

 

于是,在从数据库读出数据过后调用charConvert(rs.getString("colName")),这样就可以正常显示数据库中的中文数据了。

 

 

 

 

 

你可能感兴趣的:(乱码)