<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,  comments - 11,  trackbacks - 0

      1、Java編譯器在對源文件編譯前,會先把源文件轉(zhuǎn)換為unicode編碼,因為這個原因,我們在編譯時一定要把源文件用的是什么編碼方式正確無誤的”告訴”編譯器。

      例如:我們的源文件是以UTF-8的方式保存的,而在編譯時卻把它當(dāng)作是用GBK方式保存的,這樣編譯器就會按照GBK->Unicode的編碼轉(zhuǎn)換方法對源文件進行轉(zhuǎn)換,然后再編譯,這樣當(dāng)然會出錯,實際上編譯器應(yīng)當(dāng)按照UTF-8->Unicode的編碼轉(zhuǎn)換方法來對源文件進行轉(zhuǎn)換。

      a.對于控制臺程序,編譯器會把源文件看作是由系統(tǒng)默認(rèn)的編碼類型來編碼的(系統(tǒng)默認(rèn)的編碼類型取決于在控制面板區(qū)域設(shè)置里的配置,中文win2k下通常是GBK),也可以使用-encoding參數(shù)來設(shè)置,如:javac -encoding UTF-8,這樣編譯器就會把源文件看作是用UTF-8編碼的(這只是告訴編譯器源文件的編碼類型,而不是對源文件轉(zhuǎn)碼)。在各種語言的平臺上只要在編譯用時-encoding指定與源文件的編碼相同的編碼方式,就不會存在國際化的問題了。

      b.對于JSP,編譯器則會根據(jù)設(shè)定的字符集來判斷JSP文件使用的是什么編碼方式,進而將其轉(zhuǎn)換成unicode后進行編譯;若JSP中未指定,編譯器則會把JSP文件看作是按照系統(tǒng)默認(rèn)的編碼來保存的。在JSP2.0里新增了一個指令來通知編譯器這個源文件所使用的編碼方式。

      2、在處理輸入輸出時,注意設(shè)置輸入流和輸出流的編碼類型與用戶輸入時和輸出設(shè)備顯示時采用的編碼方式一致。

      由于JRE在處理輸入輸出時會將輸入或輸出的內(nèi)容進行編碼轉(zhuǎn)換,對于輸入會轉(zhuǎn)換為unicode后再送入,因此要正確的匹配實際輸入內(nèi)容的編碼方式和告知JRE的編碼方式,對于輸出,會由unicode轉(zhuǎn)換為其他的編碼再送出程序,因此要正確匹配輸出設(shè)備顯示時用的編碼方式和告知JRE的編碼方式。

      例如:程序中設(shè)置輸入流的編碼是new InputStreamReader(System.in,"GB2312");而程序運行后用戶輸入時用了繁體中文的輸入法,輸入了BIG5編碼的內(nèi)容,這樣JRE把BIG5編碼的內(nèi)容當(dāng)作GB2312的進行了GB2312->unicode的編碼轉(zhuǎn)換,這樣轉(zhuǎn)換后的結(jié)果顯然不是用戶想要輸入的內(nèi)容了。

      默認(rèn)情況下,JRE會把輸入輸出的內(nèi)容當(dāng)作是按照系統(tǒng)默認(rèn)編碼方式編碼的。

      3、在Servlet中,除了一定要把源文件用的是什么編碼方式正確無誤的”告訴”編譯器外,還要注意實際提交的URL數(shù)據(jù)、表單數(shù)據(jù)的編碼格式和request中聲明的編碼格式一致。

      客戶端瀏覽器在通過表單和URL提交數(shù)據(jù)時,容器和JVM會將request中的數(shù)據(jù)看作是按照request所聲明的編碼方式來編碼的,將數(shù)據(jù)由這種編碼方式轉(zhuǎn)換為unicode后再送入servlet(實際上容器會先將request中的數(shù)據(jù)轉(zhuǎn)為一種中間編碼方式,具體根據(jù)容器的配置而定,再由JVM由這種中間方式轉(zhuǎn)換為unicode,通常這種中間格式是ISO)。servlet輸出的unicode數(shù)據(jù)會由容器根據(jù)response中聲明的編碼方式進行轉(zhuǎn)換,再送到客戶端瀏覽器上。

      在接收客戶端輸入時,用request.setCharacterEncoding()聲明請求中數(shù)據(jù)的編碼方式。

      在向客戶端輸出時用response.setContentType("text/html;charset=");聲明響應(yīng)的數(shù)據(jù)的編碼方式,告知瀏覽器以哪種編碼方式顯示。

      4、在JSP中,由于JSP本就會被JSP編譯器編譯為servlet來運行,因此情況與servlet相同。

      這兩個JSP指令聲明了請求和響應(yīng)的編碼方式。

      只要確保URL參數(shù)或表單中數(shù)據(jù)的編碼方式和所聲明的編碼方式一致,再通過告知JSP編譯器本JSP文件采用的編碼方式及含有哪種字符,即可解決JSP的字符編碼問題。

      這里是一個具體的例子:

      現(xiàn)在因為瀏覽器對UTF-8的支持,我們可以通過在源文件、請求、響應(yīng)中都使用unicode編碼方式,來輕松達到處理國際化和字符編碼問題的目標(biāo)。

      以我們使用的tomcat4.1.2為例,過程如下:

      1、編寫JSP頁面時:在每個JSP頁面在頁首都要增加一行:

      在編輯JSP頁面時,一定要確保JSP文件以unicode的方式保存,目前幾乎所有的編輯器都有以unicode編碼保存或?qū)⑽募?nèi)容轉(zhuǎn)換成unicode的功能。

      2、增加一個用來聲明request的CharacterEncoding的類SetCharacterEncodingFilter.java;

      SetCharacterEncodingFilter的這個類主要的作用就是:把request在從頁面剛提交到server端的時候的encoding聲明為我們想要的encoding,通過調(diào)用request的方法setCharacterEncoding (String encoding) 來改變,這樣可以使request的從客戶端傳過來的時候,按我們在web.xml (在第二點可以講到) 中配置的encoding來對提交的數(shù)據(jù)編碼。

      3、修改web.xml文件,配置一個filter來過濾全部url請求,通過第二步中的類,聲明所有url請求的編碼類型未UTF-8。

      在web.xml文件中加上以下這段:

      

    posted on 2007-11-03 16:43 jadmin 閱讀(58) 評論(0)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产性爱在线观看亚洲黄色一级片| 国产亚洲精品高清在线| 美女又黄又免费的视频| 亚洲女同成人AⅤ人片在线观看| 国产麻豆成人传媒免费观看| 亚洲成人在线免费观看| 亚洲成人国产精品| 97公开免费视频| 狠狠入ady亚洲精品| 亚洲成熟xxxxx电影| 毛片免费在线播放| 999zyz**站免费毛片| 激情五月亚洲色图| 国产亚洲精品国看不卡| 久久久久久久久免费看无码| a级毛片免费高清视频| 亚洲女人18毛片水真多| 亚洲一级Av无码毛片久久精品| 99精品国产成人a∨免费看| 国产亚洲蜜芽精品久久| 久久青青草原亚洲av无码app| 免费人成视频在线观看不卡| 最近中文字幕大全中文字幕免费| 猫咪免费人成网站在线观看入口 | 国产裸模视频免费区无码| baoyu777永久免费视频| AV激情亚洲男人的天堂国语| 精品日韩亚洲AV无码一区二区三区| 免费在线视频一区| 中文字幕无码视频手机免费看| 免费无码H肉动漫在线观看麻豆| 久久亚洲精品无码aⅴ大香 | 亚洲色大成网站WWW久久九九| 免费AA片少妇人AA片直播| 两个人的视频www免费| 国产亚洲精品精品精品| 亚洲乱码无限2021芒果| 亚洲AV成人片色在线观看| 亚洲人成影院在线观看| 嫩草影院在线免费观看| 亚洲一级毛片免费观看|