Java中文問題一直困擾著很多初學者,如果了解了Java系統(tǒng)的中文問題原理,我們就可以對中文問題能夠采取根本的解決之道。
最古老的解決方案是使用String的字節(jié)碼轉(zhuǎn)換,這種方案問題是不方便,我們需要破壞對象封裝性,進行字節(jié)碼轉(zhuǎn)換。
還有一種方式是對J2EE容器進行編碼設(shè)置,如果J2EE應(yīng)用系統(tǒng)脫離該容器,則會發(fā)生亂碼,而且指定容器配置不符合J2EE應(yīng)用和容器分離的原則。
在Java內(nèi)部運算中,涉及到的所有字符串都會被轉(zhuǎn)化為UTF-8編碼來進行運算。那么,在被Java轉(zhuǎn)化之前,字符串是什么樣的字符集?;Java總是根據(jù)操作系統(tǒng)的默認編碼字符集來決定字符串的初始編碼,而且Java系統(tǒng)的輸入和輸出的都是采取操作系統(tǒng)的默認編碼。
因此,如果能統(tǒng)一Java系統(tǒng)的輸入、輸出和操作系統(tǒng)者的編碼字符集合,將能夠使Java系統(tǒng)正確處理和顯示漢字。這是處理Java系統(tǒng)漢字的一個原則,但是在實際項目中,能夠正確抓住和控制住Java系統(tǒng)的輸入和輸出部分是比較難的。J2EE中,由于涉及到外部瀏覽器和數(shù)據(jù)庫等,所以中文問題亂碼顯得非常突出。
J2EE應(yīng)用程序是運行在J2EE容器中。在這個系統(tǒng)中,輸入途徑有很多種:一種是通過頁面表單打包成請求(request)發(fā)往服務(wù)器的;第二種是通過數(shù)據(jù)庫讀入;還有第3種輸入比較復雜,JSP在第一次運行時總是被編譯成Servlet,JSP中常常包含中文字符,那么編譯使用javac時,Java將根據(jù)默認的操作系統(tǒng)</a>編碼作為初始編碼。除非特別指定,如在Jbuilder/eclipse中可以指定默認的字符集。
輸出途徑也有幾種:第一種是JSP頁面的輸出。由于JSP頁面已經(jīng)被編譯成Servlet,那么在輸出時,也將根據(jù)操作系統(tǒng)的默認編碼來選擇輸出編碼,除非指定輸出編碼方式;還有輸出途徑是數(shù)據(jù)庫,將字符串輸出到數(shù)據(jù)庫。
由此看來,一個J2EE系統(tǒng)的輸入輸出是非常復雜,而且是動態(tài)變化的,而Java是跨平臺運行的,在實際編譯和運行中,都可能涉及到不同的操作系統(tǒng),如果任由Java自由根據(jù)操作系統(tǒng)來決定輸入輸出的編碼字符集,這將不可控制地出現(xiàn)亂碼。
正是由于Java的跨平臺特性,使得字符集問題必須由具體系統(tǒng)來統(tǒng)一解決,所以在一個Java應(yīng)用系統(tǒng)中,解決中文亂碼的根本辦法是明確指定整個應(yīng)用系統(tǒng)統(tǒng)一字符集。
安徽新華電腦學校專業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢】