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