天下難事,必作于易;天下大事,必作于細(xì)
          如果我有方向,那就是遠(yuǎn)方
          posts - 11,comments - 8,trackbacks - 0

          作者fbysss
          msn:jameslastchina@hotmail.com?
          blog:blog.csdn.net/fbysss
          聲明:本文由fbysss原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處
          關(guān)鍵字:亂碼

          文件1:encode.jsp

          <%@ page language="java" contentType="text/html; charset=GBK"
          ??? pageEncoding="GBK"%>
          <%
          ??? String sFileName = "中文文件名.doc";
          ?? sFileName = java.net.URLEncoder.encode(sFileName);//代碼行1
          %>
          ?<a href="javascript:decode('<%=sFileName%>');">decode</a>
          <html>
          <meta http-equiv="Content-Type" content="text/html; charset=gbk" />
          <body>
          <script language="javascript">
          function??? decode(filename){
          ?? location.href="decode.jsp?filename="+filename;//代碼行2
          }

          </script>
          </body>
          </html>

          文件2:decode.jsp

          <%@ page language="java" contentType="text/html; charset=gbk"
          ??? pageEncoding="gbk"%>
          <%
          ??? String sFileName = request.getParameter("filename");
          ?sFileName = java.net.URLDecoder.decode(sFileName,"GBK");//代碼行3
          ?????out.println("filename:"+sFileName);
          %>

          ????????看上去,這樣肯定可以達(dá)到要求了,但是事實(shí)不是這樣,javascript并不識(shí)別jsp編碼后的字符串:
          用鼠標(biāo)移動(dòng)到鏈接上方時(shí),可以看到IE狀態(tài)欄上的確是正確的編碼,即"%D6%D0%CE%C4%CE%C4%BC%FE%C3%FB.doc"
          然而要注意的是:用鼠標(biāo)右鍵點(diǎn)擊鏈接-〉屬性看到的URL是javascript:decode('?D?????t??.doc');后果可想而知,轉(zhuǎn)向后輸出的是亂碼。
          ?????? 弄了半天,轉(zhuǎn)UTF-8也是一樣,一個(gè)小問(wèn)題整的很郁悶,最后想到,還得在js這里下手。
          ?????? 把encode.jsp代碼行1注釋掉,代碼行2前面加入一行:filename = encodeURI(filename);
          看到一點(diǎn)進(jìn)展:轉(zhuǎn)向后的url已經(jīng)很規(guī)范了:filename=%E4%B8%AD%E6%96%87%E6%96%87%E4%BB%B6%E5%90%8D.doc,但是結(jié)果仍然是亂碼。為啥呢?注意觀察,前面的編碼和后面是不一樣的!
          然而,javascript的EncodeURI沒(méi)有提供編碼參數(shù),默然就是UTF-8.? 好,那么?sFileName = java.net.URLDecoder.decode(sFileName,"UTF-8");行不行呢?答案是:不行,原因我現(xiàn)在還沒(méi)找到,找到了會(huì)在此補(bǔ)充,如果哪位知道,還望指點(diǎn)。
          解決辦法:把代碼行3替換成
          sFileName=?new String(sFileName.getBytes("ISO-8859-1"), "UTF-8");
          現(xiàn)在再看結(jié)果,已經(jīng)是正常的中文了。

          補(bǔ)充:Ajax中,servlet輸出中文之后,需要js讀取,同樣面臨編碼問(wèn)題,可以采取如下方式:
          在servlet中用URLEncoder編碼sText = URLEncoder.encode(sText,"UTF-8");
          在js中用decodeURI解碼xText = decodeURI(xText);

          posted on 2007-09-04 16:34 flyepp 閱讀(1220) 評(píng)論(0)  編輯  收藏 所屬分類: Useful articles

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 侯马市| 古蔺县| 娱乐| 龙州县| 界首市| 团风县| 韶关市| 阿勒泰市| 南岸区| 田林县| 嘉禾县| 淄博市| 民县| 河东区| 尼木县| 凤山县| 绥芬河市| 伊春市| 云龙县| 全南县| 邯郸市| 宜川县| 闸北区| 公安县| 千阳县| 塔河县| 岱山县| 彭山县| 洪洞县| 阳信县| 信宜市| 陕西省| 土默特右旗| 扶绥县| 水富县| 炎陵县| 会昌县| 景东| 华宁县| 商城县| 高唐县|