磨刀不誤砍柴工

          合抱之木,生于毫末;九層之臺(tái),起于累土;千里之行,始于足下。

             ::  ::  ::  :: 管理

          JAVA亂碼:

          測(cè)試代碼:

          								public
          								class SayHello {
          	publicstaticvoid main(String[] args){
          		//System.setProperty("file.encoding", "iso8859-1");
          		System.out.println("您好!");
          	}
          }
          

          采用JVM默認(rèn)file.encoding編碼編譯:(默認(rèn)為GBK)
          ?image

          指定file.encoding編譯:(指定為iso8859-1)

          image

          可以看出,若不指定初始參數(shù)file.encoding=iso8859-1(采用默認(rèn)的GBK),則打印出亂碼。同時(shí),若指定的值與編譯時(shí)不一致也會(huì)是亂碼。

          ?

          因此,解決亂碼的關(guān)鍵在于,寫與讀時(shí),編碼方式要一致。

          ?

          --------------------------------------------------------------------------------------------------------------

          JSP亂碼:

          測(cè)試jsp頁面:

          用EditPlus書寫jsp頁面encoding.jsp

          java" contentType="text/html; charset=GB2312"
          ??? pageEncoding="UTF-8"%>]]>




          測(cè)試頁面


          歡迎您!

          然后保存到tomcat的Root目錄下文件中,注意:選擇編碼方式為UTF-8

          image

          游覽此頁面,可以看到頁面正常無亂碼:

          image


          將:

          java" contentType="text/html; charset=GB2312" pageEncoding="UTF-8"%>]]>

          替換為:

          java" contentType="text/html; charset=GB2312" pageEncoding="GBK"%>]]>

          再次游覽此頁面,頁面出現(xiàn)亂碼:

          image

          ?

          原理:

          ]]>

          在這行的頁面指令中的"text/html; charset=UTF-8"將應(yīng)答消息中的"Content-type" 設(shè)置為"text/html; charset=UTF-8"。

          "pageEncoding"只是指明了 JSP 頁面本身的編碼格式,指明了 JSP 是以什么編碼方式保存。容器在讀取文件時(shí)將起轉(zhuǎn)化為內(nèi)部使用的 Unicode. 當(dāng)應(yīng)答發(fā)送回至瀏覽器時(shí),容器會(huì)將內(nèi)部使用的 Unicode 轉(zhuǎn)化為在 Content-type 中指定的字符集。

          如果沒有指定 PageEncoding,可以通過使用 Content-type 指定的字符集來解釋 JSP 頁面字節(jié)。

          ?

          jsp頁面在服務(wù)器端處理的過程是:

          jsp—>.java文件—> .class文件

          jsp—> .java文件是由服務(wù)器讀取jsp頁面文件,根據(jù)pageEncoding指明的編碼方式自動(dòng)轉(zhuǎn)換的。與前面java亂碼一節(jié)中指出的,這里也要保證寫與讀時(shí)編碼一致才不會(huì)出現(xiàn)亂碼。從上面的例子也驗(yàn)證了這一點(diǎn)。

          .java文件 --> .calss文件過程,即為java編譯過程,由服務(wù)器邊jvm自動(dòng)進(jìn)行。

          ?

          至于,text/html; charset=GB2312,則可以設(shè)置成任何游覽器支持的并且支持中文的編碼方式,都能保證頁面不出現(xiàn)亂碼。(表單提交及URL請(qǐng)求不在此討論范圍內(nèi)),這是因?yàn)椋谏身憫?yīng)給游覽器前,虛擬機(jī)中以u(píng)nicode編碼的中文是正確的,服務(wù)器會(huì)更據(jù)指定的charset,將unicode轉(zhuǎn)換成正確的編碼。

          ?

          參考文章:

          Java 編程技術(shù)中漢字問題的分析及解決

          JSP/Servlet 中的漢字編碼問題

          編碼字符集與Java -Java World亂碼問題根源之所在

          UTF-8 字符處理在 Web 開發(fā)中的應(yīng)用

          ?

          Technorati 標(biāo)簽:
          posted on 2008-10-16 13:41 liwei5891 閱讀(595) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 无锡市| 尚义县| 怀安县| 和顺县| 沂水县| 滕州市| 洪泽县| 孟连| 页游| 图片| 东明县| 定安县| 珲春市| 基隆市| 武宣县| 连云港市| 吴旗县| 龙南县| 罗定市| 怀来县| 景德镇市| 昌江| 中超| 扶余县| 吉林市| 农安县| 获嘉县| 民权县| 商南县| 河间市| 晋州市| 黎城县| 金塔县| 定日县| 盐亭县| 通山县| 通州市| 迭部县| 和平县| 安远县| 安塞县|