非西文字符的亂碼問題解決方法

使用JavaWeb技術編寫web應用程序,亂碼問題經常讓人頭疼。 這裏的亂碼問題一般能夠分爲三種狀況,分別是:html

  1. servlet顯示中文亂碼。
  2. servlet讀取表單提交的數據亂碼。
  3. 鏈接數據庫亂碼。

Java的內核和Class文件是基於Unicode的,這使Java程序具備良好的跨平臺性,但也帶來了一系列亂碼問題的麻煩。緣由主要有兩方面,即:web

  1. Java自己編譯時產生的亂碼問題。
  2. 以及Java程序與其餘媒介交互產生的亂碼問題。

編寫代碼時,要保證整個應用程序編碼格式統一到一個能夠顯示全部字符的編碼上就能夠了。數據庫

1.首先來看一下與表單數據提交的編碼問題。當在瀏覽器的表單輸入中文的時候,若是在接收這些數據的servlet中不加任何處理直接讀取數據,這個數據就是亂碼的。緣由是客戶端提交的數據在提交給服務器的時候,傳輸的數據編碼格式是ISO-8859-1。這種編碼格式是不能顯示中文的,也和服務器上servlet使用編碼格式不一樣。這個時候咱們能夠採用相似於以下的方式將其轉換過來。瀏覽器

String str = new String( param.getBytes("ISO-8859-1"),"UTF-8");

上面的程序中須要轉換的編碼格式和系統的默認設置有關,不必定是UTF-8,在中文系統下也有多是GB2312或者是GB13080。tomcat

固然每一個數據都用這樣的方式轉換的話,效率會很是低下。也有比較簡單的方法,在讀取數據以前使用request對象的setCharacterEncoding(String encode)來設定轉換關係。如:服務器

request.setCharacterEncoding("UTF-8");

注意:編碼

  1. 使用這樣的方式對於客戶端使用GET請求沒有效果,緣由很簡單,GET請求,數據在URL裏,並且數據通過特殊的編碼處理,不能這樣簡單的轉換。
  2. 必定在讀取數據以前進行設定,不然也沒有效果。

2.解決了數據提交的亂碼問題,再看數據顯示的亂碼問題。當使用servlet在輸出非西字符的時候,也會出現亂碼。緣由在於客戶端的瀏覽器也不知道用什麼樣的方式來解釋從服務器上獲得的數據。這個時候須要使用response對象上的方法加以設定。有兩種選擇:code

第一種:server

response.setContentType("text/html;charset=UTF-8");

第二種:xml

response.setCharacterEncoding("UTF-8");

經過這樣的設定,基本上就能解決數據顯示的亂碼問題。

3.最後說一下訪問數據庫的亂碼問題。對於數據庫的訪問,也會產生亂碼問題。主要在於數據庫中存儲的數據格式或者不能有效的存儲咱們的數據,或者是數據存儲的編碼格式和程序中使用的編碼格式不一致形成的。解決的方案只有一點,就是把這些數據的編碼格式統一。

4.補充: tomcat服務器配置字符集爲utf-8-完全解決中文亂碼問題 程序編寫的過程當中遇到各類中文編碼的問題時候,須要在程序中不少環節中去進行過濾和轉義,依舊有可能遇到亂碼,下面的方法,百試不爽,是針對於tomcat服務器來講的。 此外,這個方法並不會對以前的那些方法形成衝突。

在tomcat服務器根目錄下找到配置文件,路徑以下:

在tomcat服務器根目錄下/conf目錄/server.xml文件

在下列語句(設置端口的語句)後加上:

<
Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
 redirectPort="8443"  
/>

URIEncoding="UTF-8"。

設置後爲:

<
Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
 redirectPort="8443"  
URIEncoding="UTF-8"
/>

最後囉嗦一下: 解決亂碼問題的基本原則就是保證應用的前臺和後臺編碼格式統一。這句話提及來簡單,可是在真正開發中,苦逼的不斷總結吧猿們~

相關文章
相關標籤/搜索