北京北大青鳥學(xué)校學(xué)術(shù)部老師介紹:Java的內(nèi)核和class文件是基于unicode的,這使Java程序具有良好的跨平臺性,但也帶來了一些中文亂碼問題的麻煩。原因主要有兩方面,Java和JSP文件本身編譯時產(chǎn)生的亂碼問題和Java程序于其他媒介交互產(chǎn)生的亂碼問題。
首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字節(jié)流的,如果Java和JSP編譯成class文件過程中,使用的編碼方式與源文件的編碼不一致,就會出現(xiàn)亂碼。基于這種亂碼,建議在Java文件中盡量不要寫中文(注釋部分不參與編譯,寫中文沒關(guān)系),如果必須寫的話,盡量手動帶參數(shù)-ecoding GBK或-ecoding gb2312編譯;對于JSP,在文件頭加上<%@ page contentType=text/html;charset=GBK%>或<%@ page contentType=text/html;charset=gb2312%>基本上就能解決這類亂碼問題。
二、常見的解決方式
1,最基本的亂碼問題。
這個亂碼問題是最簡單的亂碼問題。一般新會出現(xiàn)。就是頁面編碼不一致導(dǎo)致的亂碼。
<%@ page language=java pageEncoding=UTF-8%>
<%@ page contentType=text/html;charset=iso8859-1%>
<html>
<head>
<title>中文問題</title>
<meta http-equiv=Content-Type content=text/html; charset=UTF-8>
</head>
</head>
<body>
我是個好人
</body>
</html>(北京北大青鳥學(xué)校)
三個地方的編碼。
第一個地方的編碼格式為jsp文件的存儲格式。Ecljpse會根據(jù)這個編碼格式保存文件。并編譯jsp文件,包括里面的漢字。
第二處編碼為解碼格式。因為存為UTF-8的文件被解碼為iso8859-1,這樣如有中文肯定出亂碼。也就是必須一致。而第二處所在的這一行,可以沒有。缺省也是使用iso8859-1的編碼格式。所以如果沒有這一行的話,“我是個好人”也會出現(xiàn)亂碼。必須一致才可以。
第三處編碼為控制瀏覽器的解碼方式。如果前面的解碼都一致并且無誤的話,這個編碼格式?jīng)]有關(guān)系。有的網(wǎng)頁出現(xiàn)亂碼,就是因為瀏覽器不能確定使用哪種編碼格式。因為頁面有時候會嵌入頁面,導(dǎo)致瀏覽器混淆了編碼格式。出現(xiàn)了亂碼。
(未完待續(xù),北京北大青鳥學(xué)校提供)