posts - 19, comments - 1, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          jsp亂碼問題研究

          Posted on 2006-09-28 09:47 xyang 閱讀(376) 評論(0)  編輯  收藏
          ??? ie默認根據(jù)服務(wù)器傳回來的contentType頭進行顯示(忽略mata標簽),對于html這種靜態(tài)文件,由于沒有contentType頭則根據(jù)<meta http-equiv="Content-Type" content="text/html; charset=GBK" />標簽中的編碼類型進行顯示.

          ??? pageEncoding指定的是jsp編譯時的編碼格式,必須對應(yīng)于jsp文件內(nèi)容的編碼,否則是亂碼
          默認pageEncoding為:ISO-8859-1,如果不指定contentType,輸出對應(yīng)于pageEncoding的編碼方式
          也就是如果都不設(shè)置的話,默認輸出ISO-8859-1,肯定是亂碼(保存為unicode即可正常顯示).

          ??? response.setCharacterEncoding("GBK")
          <%@ page contentType="text/html; charset=UTF-8">
          這兩句作用相同,設(shè)置輸出的編碼類型,但response.setCharacterEncoding("GBK")優(yōu)先級高

          ??? 通過 get/post 方式從 ie中發(fā)送漢字,發(fā)送編碼方式由Content-Type決定,request.getParameter("XX")得到的字符串是用ISO-8859-1表示的,所以必須在取值前用HttpServeletRequest.setCharacterEncoding 設(shè)置想得到的編碼類型,或是在<Connector>中添加URIEncoding="GBK"屬性,來獲取正確的編碼類型,但是,在執(zhí)行setCharacterEncoding()之前,不能執(zhí)行任何getParameter()。java doc上說明:This method must be called prior to reading request parameters or reading input using getReader()。而且,該指定只對POST方法有效,對GET方法無效。分析原因,應(yīng)該是在執(zhí)行第一個getParameter()的時候, java將會按照編碼分析所有的提交內(nèi)容,而后續(xù)的getParameter()不再進行分析,所以setCharacterEncoding()無效。 而對于GET方法提交表單是,提交的內(nèi)容在URL中,一開始就已經(jīng)按照編碼分析所有的提交內(nèi)容,setCharacterEncoding()自然就無效。



          <% @?page?contentType = " text/html;?charset=UTF-8 " ?pageEncoding = " UTF-8 " %>
          <%
          request.setCharacterEncoding(
          " UTF-8 " );
          response.setCharacterEncoding(
          " UTF-8 " );
          %>
          < html >
          ??
          < head >
          ????
          < title > test </ title >
          ????
          < meta? http-equiv ="Content-Type" ?content ="text/html;?charset=UTF-8" ? />
          ??
          </ head >
          ??
          < body > = <% = new ? String (request.getParameter( " foo " ).getBytes( " iso8859-1 " ), " UTF-8 " ) %> =
          ??????
          < form? action ="" ?method ="get" >
          ??????foo?=?
          < input? type ="text" ?name ="foo" ?value ="${param[" foo"]}" >
          ??????????
          < input? type ="submit" >
          ??????
          </ form >
          ??????tomcat:
          < Connector? port ="8080" ?URIEncoding ="GBK" ? />
          ??
          </ body >
          </ html >


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 南丰县| 青田县| 介休市| 农安县| 重庆市| 留坝县| 绥德县| 高平市| 鹰潭市| 德惠市| 翼城县| 德化县| 罗山县| 栖霞市| 和林格尔县| 蒙阴县| 徐州市| 山丹县| 武穴市| 土默特左旗| 桃园市| 蒙阴县| 泾源县| 屏南县| 天津市| 临朐县| 米脂县| 巢湖市| 兴业县| 柳河县| 洞口县| 吕梁市| 汤原县| 衢州市| 应城市| 桐城市| 东山县| 阿鲁科尔沁旗| 婺源县| 北宁市| 玉环县|