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

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

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

    小方的Java博客

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      27 隨筆 :: 17 文章 :: 115 評論 :: 0 Trackbacks
    在一個Web應(yīng)用中經(jīng)常需要向服務(wù)器傳遞一些參數(shù),一般通過form向服務(wù)器發(fā)送一個POST請求。在參數(shù)中有可能包含中文信息,如用戶信息登記、購物定單中的地址信息等等。參數(shù)字符串一般用本地字符集進(jìn)行編碼,如中文采用GB2312或GBK字符集,英文或西歐文字采用ISO8859_1字符集,但在Java程序中一律采用Unicode處理字符串,這就需要有一個編碼轉(zhuǎn)換的過程。不幸的是,現(xiàn)有的大部分Java應(yīng)用服務(wù)器都是在英語國家開發(fā)出來的,由于缺乏大字符集(中文、日文、韓文等)的應(yīng)用環(huán)境,這些應(yīng)用服務(wù)器在處理HTTP請求參數(shù)時都存在一些中文處理的問題,也是最為困擾JSP和Servlet開發(fā)者的問題。 

    產(chǎn)生這一問題的根本原因是在HTTP請求中缺乏足夠的信息來指明客戶端所使用的字符集。在一個JSP頁面中我們可以通過下面的偽指令來指明輸出頁面所使用的字符集: 



    JSP引擎會將上面的偽指令轉(zhuǎn)換為HTTP應(yīng)答的頭部: 

    Content-Type: text/html; charset=GB2312 

    樣輸出的就是采用GB2312編碼的中文頁面,瀏覽器會正確地顯示出中文。但瀏覽器在將form的內(nèi)容POST到服務(wù)器時卻沒有包含charset,而且將中文內(nèi)容用%xx的形式(xx是十六進(jìn)制數(shù))進(jìn)行編碼,例如漢字"中"的GB2312內(nèi)碼為0xD6D0,在HTTP請求中就變成了%D6%D0,根據(jù)RFC2616的規(guī)定,如果在HTTP請求中未指明字符集,就使用ISO8859_1編碼,這樣"中"字在處理時變成了兩個字符,分別為'u00D6'和'u00D0',而返回到客戶端時變成了兩個不可顯示的字符,瀏覽器一般顯示成'??'。 

    解決這一問題的傳統(tǒng)做法是編寫額外的代碼來完成字符集的轉(zhuǎn)換: 

    strOut = new String(strIn.getBytes("8859_1"), "GB2312"); 

    strIn是未經(jīng)過轉(zhuǎn)換的字符串,其編碼為ISO8859_1,strOut是經(jīng)過轉(zhuǎn)換的字符串,其編碼為GB2312。 

    在Apusic 0.9.5版中實現(xiàn)了Java Servlets 2.3規(guī)范草案,其中在ServletRequest接口中新增了一個方法setCharacterEncoding(String enc),可以補上在HTTP請求中缺少的charset信息,而上面這一煩瑣的轉(zhuǎn)換過程就在Servlet引擎中自動完成了,而且Servlet引擎還對轉(zhuǎn)換過程做了優(yōu)化,提高了運行效率。下面給出一個簡單的例子,大家可以做一下比較。 

    // 傳統(tǒng)方式 
    <%@ page contentType="text/html; charset=gb2312" %> 
    <html> 
    <body> 
    <form method=post action=test.jsp> 
    <input type=text name=your_name> 
    </form> 
    <%= new String(request.getParameter("your_name").getBytes("8859_1"), "GB2312"%> 
    </body> 
    </html> 

    // 新的方式 
    <%@ page contentType="text/html; charset=gb2312" %> 
    <% request.setCharacterEncoding("GB2312"); %> 
    <html> 
    <body> 
    <form method=post action=test.jsp> 
    <input type=text name=your_name> 
    </form> 
    <%= request.getParameter("your_name"%> 
    </body> 
    </html> 
    posted on 2006-02-01 12:46 方佳瑋 閱讀(302) 評論(0)  編輯  收藏 所屬分類: Jsp

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲AV无码专区日韩| 亚洲天天做日日做天天欢毛片| 曰批免费视频播放免费| 亚洲免费人成在线视频观看| 2021精品国产品免费观看| 亚洲AV无码一区二区三区电影| 中文字幕专区在线亚洲| 无码国产精品一区二区免费虚拟VR| 国产精品亚洲一区二区在线观看| 亚洲成Av人片乱码色午夜| 国产精品亚洲综合专区片高清久久久 | 97人伦色伦成人免费视频| xxxx日本在线播放免费不卡| 亚洲精品456在线播放| 亚洲精品国产V片在线观看 | 久久青草免费91观看| 狼人大香伊蕉国产WWW亚洲| 青青草原精品国产亚洲av| 免费一级特黄特色大片在线观看 | 亚洲国产午夜福利在线播放| 国产成人午夜精品免费视频| 中文字幕无线码中文字幕免费| 亚洲色图激情文学| 亚洲AV无码乱码在线观看裸奔| 日本高清免费不卡视频| 24小时日本电影免费看| 中文字幕av免费专区| 国产精品亚洲一区二区三区久久 | 亚洲成a人无码亚洲成www牛牛| 亚洲最新永久在线观看| 亚洲一区日韩高清中文字幕亚洲| 成全视频免费高清 | 一区二区3区免费视频| 亚洲日本中文字幕天天更新| 久久久久亚洲AV无码麻豆| 国产精品亚洲аv无码播放| 国产一级淫片免费播放| 在线观看免费污视频| 免费能直接在线观看黄的视频| 久久久精品午夜免费不卡| fc2免费人成在线|