1. 程式人生 > >web應用開發中中文亂碼問題

web應用開發中中文亂碼問題

web應用中中文亂碼問題

在java程式中,出現中文亂碼問題的原因的根源在於java程式和其他儲存媒介互換資料時,兩者編碼方案不同。
常見的中文字元編碼:

  • GB2312-80
    GB2312是簡體漢字標準字元編碼方案,是基於區位碼設計的。收錄了常用的簡體漢字、日文平假名及片假名、俄語西裡爾字母等字元,不支援繁體漢字和一些生僻字。
  • GBK
    GBK編碼是GB2312編碼的超集,向下完全相容GB2312。GBK還收錄了漢字部首符號、豎排標點符號等字元,是比較通用的漢字編碼方案。
  • Unicode
    每種語言都有自己的編碼方案,增加了那些需要支援不同語言的方案的軟體的難度,因此制定了一個世界標準,稱為Unicode。
  • UTF-8
    UTF-8是用於解決國際上字元的一種多字元編碼方案,它對英文采用8位編碼,中文使用24位編碼,包含全世界所有國家需要用到的字元,它是國際編碼,通用型很強。

出現中文亂碼問題的種類:

1. JSP頁面顯示亂碼
JSP頁面顯示亂碼是由於頁面未設定編碼方案,通過頁面的page指令的contextType屬性和pageEncoding屬性以及HTML META標籤的charset屬性中都指定使用中文編碼即可。程式碼舉例如下。

    <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.sql.*"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

2. 表單提交中文時出現亂碼
JSP獲取頁面引數時,一般是採用預設的編碼方案(ISO8859-1),如果頁面引數的編碼和頁面的編碼不一致時,很有肯能出現亂碼。如果確定亂碼問題是出於此,解決方案如下。

  • 在獲取表單資料時,首先使用request的setCharacterEncoding()方法強行設定獲取表單資料的編碼方案,但是要注意這種方法僅僅適用於表單的method屬性為post時
    。程式碼舉例如下。
//假設頁面要獲得的引數名稱為tname
  request.setCharacterEncoding("UTF-8");
  String topic=request.getParameter("tname");
  • 如果表單的method屬性為get方式,使用手動轉換的方式,程式碼舉例如下。
//假設頁面要獲得的引數名稱為tname
  String topic=request.getParameter("tname");
  topic=new String(topic.getBytes("ISO-8859-1"),"UTF-8");
  • 變數輸出到JSP頁面上出現了亂碼,通過response的setContentType()方法設定。
response.setContentType("text/html;charset=utf-8");

3. 資料庫讀取資料顯示亂碼
當程式向資料庫儲存資訊或者讀取資料庫的資訊時會出現中文亂碼現象,要保證資料庫和jsp頁面的編碼一致,建議統一使用utf-8編碼方案。本文以mysql為例。
第一步:更改資料庫編碼方式
首先更改表的編碼方式,alter table 表名 default character set utf8;
再更改列的編碼方式,alter table 表名 change 列名 列名 資料結構 character set utf-8 ;
第二步:在連線資料庫時

//要輸入你自己的使用者名稱、密碼、資料庫名字
 connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/database?user=root&password=root&userUnicode=true&characterEncoding=utf-8");