tomcat+JSP亂碼解決


tomcat+JSP亂碼解決

環境:tomcat5.5,

1. tomcat編碼轉換原則


所有頁面、數據庫、存取文件都應採用統一的編碼,否則在處理過程中需要進行編碼轉換。在此統一編碼假定爲UTF-8,其它編碼類似。


圖表 1tomcat編碼轉換

默認情況下tomcat是按ISO-8859-1編碼來處理數據的,所有傳給tomcat的數據都會被轉換爲ISO-8859-1編碼,而從tomcat中得到的也是以ISO-8859-1編碼的數據。因此,在JSP代碼從服務器獲取客戶端傳遞來的參數時,必須將參數編碼從ISO-8859-1轉爲UTF-8


2. 具體處理方式


各種編碼名稱:

http://www.iana.org/assignments/character-sets/character-sets.xml


2.1. 通用方法


String s = request.getParameter(“...”);
String str= new String(s.getBytes("ISO-8859-1"),"UTF-8");

該方法過於繁瑣,需要對每次得到的參數進行單獨的轉碼。


2.2. 處理POST提交的數據


2.2.1. 方法一:


必須在第一次獲取參數之前調用request.setCharacterEncoding(UTF-8);

注意:這個語句之前不能調用任何的request.getParameter()方法,否則會設置tomcat的缺省字符集爲"ISO-8859-1",並且使setCharacterEncoding的調用失效


2.2.2. 方法二:


如果使用了spring框架,則可以在server.xml中使用

org.springframework.web.filter.CharacterEncodingFilter過濾器:

<filter> 
<filter-name>encodingFilter</filter-name> 
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
<init-param> 
<param-name>encoding</param-name> 
<param-value>UTF8</param-value> 
</init-param> 
<init-param> 
<param-name>forceEncoding</param-name> 
<param-value>true</param-value> 
</init-param> 
</filter> 

<filter-mapping> 
<filter-name>encodingFilter</filter-name> 
<url-pattern>*.html</url-pattern> 
</filter-mapping> 
<filter-mapping> 
<filter-name>encodingFilter</filter-name> 
<url-pattern>*.jsp</url-pattern> 
</filter-mapping> 

注意:個過濾器之前的過濾器中不能有對getParameter這類方法的調用,比較安全的做法就是把這個過濾器儘量靠前放

2.3. 處理GET提交的參數


2.3.1. 修改URI編碼


在這個目錄下:Apache Software Foundation\Tomcat 6.0\confserver.xml文件中,找到

   <Connector port="8888" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443"  />
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
    -->  
然後修改如下:
   <Connector port="8888" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding="UTF-8" />
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding="UTF-8" />

注:對於tomcat5.0只需要修改第一個Connector就可以了。

有個地方說是在Connector中添上useBodyEncodingForURI="true",但我試了一下,不行。


3. 編碼設置


3.1. *.jsp文件


<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" language="java" %>

contentType="text/html; charset=UTF-8":用於指定瀏覽器以UTF-8編碼來解釋網頁。

pageEncoding="UTF-8" :說明該jsp文件的編碼類型,必須與文件編碼類型一致(在eclipse中會據此將文件保存爲該類型,而不管eclipse當時的encoding是什麼)。此外,tomcat會據此讀取jsp文件並轉化爲servlet存爲系統默認編碼。


3.2. mysql數據庫


1mysql配置文件:修改mysqlwindows\my.inidefault-character-set=utf-8


2mysql裏數據庫和表也都設爲utf8_unicode_ci


3、數據庫連結:jdbc:mysql://localhost/mydb?useUnicode=true&characterEncoding=utf-8


參考

http://www.blogjava.net/caizh2009/articles/309193.html

 http://xinbupo.blog.163.com/blog/static/157566605201241684656283/


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章