下邊提供4種不同情況的亂碼解決方案,基本上包括了web開發中出現亂碼的不同情況。
主要針對java+mysql開發環境提出的亂碼解決方案,只要作相應修改,可以用於不同語言環境的亂碼問題解決。
一、JSP頁面顯示亂碼
下面的顯示頁面(display.jsp)就出現亂碼:
程式碼
二、表單提交中文時出現亂碼下面是一個提交頁面(submit.jsp),程式碼如下:
程式碼
碼
<%@ page contentType="text/html; charset=gb2312"%>
如果submit.jsp提交英文字元能正確顯示,如果提交中文時就會出現亂碼。原因:瀏覽器預設使用UTF-8編碼方式來傳送請求,而UTF-8和GB2312編碼方式表示字元時不一樣,這樣就出現了不能辨識字元。解決方法:透過request.seCharacterEncoding("gb2312")對請求進行統一編碼,就實現了中文的正常顯示。修改後的process.jsp程式碼如下:
程式碼
<%@ page contentType="text/html; charset=gb2312"%>
<%
request.seCharacterEncoding("gb2312");
%>
三、資料庫連線出現亂碼
只要涉及中文的地方全部是亂碼,解決方法:在資料庫的資料庫URL中加上useUnicode=true&characterEncoding=GBK就OK了。
四、資料庫的顯示亂碼
在mysql4.1.0中,varchar類型,text類型就會出現中文亂碼,對於varchar型別把它設為binary屬性就可以解決中文問題,對於text類型就要用一個編碼轉換類來處理,實現如下:
程序代碼
public class Convert {
/** 把ISO-8859-1碼轉換成GB2312
*/
public static String ISOtoGB(String iso){
String gb;
try{
if(iso.equals("") || iso == null){
return "";
}
else{
iso = iso.trim();
gb = new String(iso.getBytes("ISO-8859-1"),"GB2312");
return gb;
}
}
catch(Exception e){
System.err.print("編碼轉換錯誤:"+e.getMessage());
return "";
}
}
}
把它編譯成class,就可以呼叫Convert類別的靜態方法ISOtoGB()來轉換編碼。