對于中文亂碼問題,Java中才用的默認編碼方式是Unicode,而中文的編碼方式一般情況是GB2312,因為編碼格式的不同,導致在中文不能正常顯示。在不同的JDK版本和不同的應用服務器中的處理方法是不同的。但是其本質上都是一樣的,就是把中文字符轉化成合適的編碼方式,或者是把在顯示中文的環境中聲名采用GB2312的編碼。統一編碼方案之后自然可以正常顯示。
1.1 JSP頁面中文亂碼
在JSP頁面中,中文顯示亂碼有兩種情況:一種是HTML中的中文亂碼,另一中是在JSP中動態輸出的中文亂碼。
解決方案:修改代碼中page指令。具體修改如下:<% page language=”java” import=”java.util.*” contentType=”text/html;charset=gb2312” %>
1.2 URL傳遞參數中文亂碼
一般情況下,可以用類似http://localhost:8080/chapt4/URLCharset.jsp?param='中文'這種形式來傳遞參數,而且HTML在處理表單的時候,當表單的method采用get方法的時候,傳遞參數的形式與URL傳遞參數的形式基本一樣。
對于URL傳遞中文參數亂碼這個問題,其處理方法比較獨特,僅僅轉換這個中文字符串的編碼或者設置JSP頁面顯示編碼都是不能解決問題的。這里需要對Tomcat服務器的配置文件進行修改,即Tomcat的conf目錄下的server.xml配置文件,在<Connector>中添加URLEconding=”gb2312”。
1.3表單提交中文亂碼
對于表單中提交的數據,可以使用request.getParameter("")的方法獲取。但是當表單中如果出現中文數據的時候就會出現亂碼。
造成這個問題的原因是:在Tomcat中,對于以Post方法提交的表單采用的默認編碼為ISO-8859-1,而這種編碼不支持中文字符。對于這個問題,可以采用轉換編碼格式的方法來解決。即可以調用String類的getBytes方法進行編碼轉換。
1.4數據庫操作中文亂碼
在建立數據庫的時候,應該選擇支持中文的編碼格式,最好能和JSP頁面的編碼格式保持一致,這樣就可以盡可能減少數據庫操作的中文亂碼問題。同時在JDBC連接數據庫的時候可以使用類似下面這種形式的URL:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs;useUnicode=true;characterEncoding=gb2312。
上面所說的方法只適用于創建數據庫的時候已經選擇支持中文的編碼,不過當一個數據庫已經創建而且編碼格式已經是ISO-8859-1時,這種情況下通過重新創建數據庫顯然是不現實的。這時只有在讀取數據庫的時候進行轉碼,使用的方法還是上一節的轉碼方法。
1.5 Eclipse開發工具中JSP文件中文不能保存
在Eclipse中,JSP文件默認的編碼格式為ISO-8859-1,所以在JSP代碼中間如果出現中文就不能保存。
對于這個問題,這要在JSP頁面中指明頁面編碼即可。即page指令中添加pageEncoding=”gb2312”。
1.6 Eclipse開發工具中中文顯示亂碼
在Eclipse中,由于默認的JSP編碼格式為ISO-8859-1,所以當打開由其他編輯器編輯的JSP頁面就會出現亂碼。對于這個問題,只需要更改eclipse的設置即可。Eclipse,Window->Preferences->General->Content Types->Text>JSP,修改Default encoding 為GB2312即可。當然也可以把jsp文件用txt打開,然后另存為UniCode格式。
1.7 JSP下載中文文件名亂碼
在實現文件下載功能的時候,如果出現中文文件名,如果不進行特殊的處理,下載下來的中文文件名會變成亂碼,在下載前,就需要對這個文件名進行處理,然后才能正常顯示中文的文件名。
解決方案:運用response對象的setCharacterEncoding,setHeader(filename改為ISO-8859-1編碼),setContentType方法即可。
當然我們在面對一些中文亂碼問題時,可以編寫過濾器filter實現轉換字符編碼
PS:我覺得寫的還算詳細。一些東西參考《零基礎學習Java Web開發》,與大家拿出來分享。
posted on 2010-04-26 15:41
landon 閱讀(2154)
評論(0) 編輯 收藏 所屬分類:
Program