盡管關于java中文問題的討論已經相當多了,但由于Java的相關技術標準繁多,面向Java的Web服務器、應用服務器以及JDBC數據庫驅動等都沒有官方的標準,所以Java應用在處理中文時所存在的問題不僅沒有消失而且隨著所選用的服務器、驅動程序以及運行環境等因素的不同而變化。那么我們如何從眾多現象中找出問題所在,并進行分析和解決呢?與大部分的討論不同,本文將主要從如何猜測、發現和檢查問題的角度給出建議,幫助開發人員找出可能引起問題的各種源頭,從而更好地解決Java的中文問題。
引言
盡管對于Java中文處理問題的討論已不乏其數,但由于Java技術涉及內容廣(J2EE包含了十幾種相關技術),技術供給商繁多,面向Java的Web服務器、應用服務器以及JDBC數據庫驅動等都沒有官方的標準,所以Java應用在處理中文過程中出了存在固有的問題外也存在隨著選用的服務器,驅動程序的不同而帶來的Java中文問題的多變性,增加了問題的復雜度。那么,我們如何在這么紛繁的現象中找到問題的癥結呢?
Java中文問題的一般解決辦法
事實上,Java的中文問題都是由于Java應用所采用的缺省編碼格式與目標或者應用所要讀入字符的編碼格式不同而造成的(具體參見文獻1)。對于如何解決Java的中文問題,通常有四種方法:
1)選擇JDK的中文本地化版本。盡管Java2 JDK的中文本地化版本(http://java.sun.com/PRodUCts/jdk/1.2/chinesejdk.Html)并不是一個官方的版本,Sun公司也沒有承諾會對該本地化版本進行升級,但其仍不失為一個Java中文問題的解決方案。
2)選擇合適的編譯參數。對于Java的國際版本來講,我們也可以在編譯Java應用的時候通過指定確定的編碼機制來實現其編譯結果對中文的支持。例如,對于需要支持繁體中文和簡體中文應用可以通過javac -encoding big5 sourcefile.java 和javac -encoding gb2312 sourcefile.java來編譯源程序。
3)通過編程的方式實現字符編碼的轉換代碼。通過編程的方式來解決Java的中文問題,已經成為了一種較為普遍的做法。下面就是一種最常見的字符編碼轉換函數,其將字符的編碼格式轉換為中文Windows系統的GBK編碼形式。
public static String toChinese(String strvalue)
{
try{
if(strvalue==null)
return null;
else
{
strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK");
return strvalue;
}
}catch(Exception e){
return null;
}
}
4)定義字符輸出集。對于jsp應用,我們可以通過<%@ page contentType="text/html; charset=GBK" %>或<%@ page contentType="text/html; charset=GB2312" %>來定義JSP頁面的字符輸出集。當然,我們也可以通過HTML的標記<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">來定義字符的輸出集。
新聞熱點
疑難解答