




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
在網(wǎng)上搜了很多資料都沒(méi)有搞定,一般都有以下幾種說(shuō)法:方法1:在后臺(tái)中先獲得字符串的iso-8859-1編碼形式數(shù)組,再使用此數(shù)組實(shí)例一個(gè)UTF-8編碼形式String類型字符串.頁(yè)面提交的url為:leavesp?work=部門主管審批后臺(tái)處理:StringinStr=request.getParameter("work");StringoutStr=newString(inStr.getBytes("iso-8859-1”),"UTF-8”);方法2:在頁(yè)面?zhèn)鬟f過(guò)來(lái)時(shí)先通過(guò)JavaScript將URL編碼,再到后臺(tái)進(jìn)行解碼:頁(yè)面部分:<scripttype="text/javascript">functiondogetMethod(url){//url編碼前:leavesp?work=部門主管審批url=encodeURI(url);//url編碼后:leavesp?work=%E9%83%A8%E9%97%A8%E4%B8%BB%E7%AE%A1%E5%AE%A1%E6%89%B9window.open(uri,’’,’’);}</script>后臺(tái)部分:(解碼)StringinStr=request.getParameter("work");StringoutStr=.URLDecoder.decode(inStr);嘗試過(guò)兩種方法后好像都不行,在后臺(tái)獲取到的字符還是會(huì)亂碼.試完之后真想哭.*o*使用第一種方法后發(fā)現(xiàn):在請(qǐng)求(request)中獲得的字符串是這樣的:26AAO4-1UEoAu使用newString(inStr.getBytes("iso-8859-T'),"UTF-8”);處理后字符成了:沒(méi)法,只能再試第二種方法了,使用后發(fā)現(xiàn):在頁(yè)面中使用encodeURI(url)后,字符串是這樣的:%E9%83%A8%E9%97%A8%E4%B8%BB%E7%AE%A1%E5%AE%A1%E6%89%B9好像有希望了!!!!應(yīng)該只要在后臺(tái)再來(lái)decoder一下就行了吧,偶是這樣想的,也是這樣做的:在后臺(tái)中:StringinStr=request.getParameter("work");outStr=.URLDecoder.decode(inStr);在請(qǐng)求中獲得的字符串是這樣的:e「6一瓦洛?i5?i&%Jdecoder處理后得出的字符串為:e「6一'ai?9?ia?i$%1這時(shí)候真想哭啊!!%#$%@@!@$$##革命尚未成功,還需努力!!!從第二種方法中發(fā)現(xiàn):在請(qǐng)求中獲得的字符串巳經(jīng)亂碼了,用decoder處不處理值都是一個(gè)樣!!明明我在頁(yè)面?zhèn)鬟^(guò)來(lái)的值是巳經(jīng)encode過(guò)了的字符,而后來(lái)取出來(lái)卻???.,這是為什么呢?難倒是頁(yè)面編碼設(shè)置得有問(wèn)題?看了一下頁(yè)面編碼是:pageEncoding="UTF-8”改了!改成:pageEncoding="iso-8859-1”試試.瀏覽頁(yè)面上,發(fā)現(xiàn)頁(yè)面上的中文變成了很多e&%。之類的字符,不管了,再試下,還是一樣的結(jié)果.濤聲依舊!忽然想到應(yīng)該是在獲得字符串之前,也就是在request.getParameter("work”);這之前的某個(gè)地方巳經(jīng)將URL進(jìn)行了decoder,并且將獲得的字符用Iso-8859-1的編碼方式存儲(chǔ)過(guò)了.所以在request中會(huì)得到這些類似于e&%。之類的字符,這種字符應(yīng)該就是中文的iso-8859-1的形式!!有辦法了,既然巳經(jīng)獲得了iso-8859-1編碼形式的中文,那就只要再使用第一種方法(先獲得字符串的iso-8859-1數(shù)組,再將它實(shí)例成UTF-8的字符串)來(lái)進(jìn)行處理不就OK了!試過(guò)之后果然OK!!!處理中文亂碼代碼實(shí)現(xiàn)部分:jsp頁(yè)面:<%@pagelanguage="java"pageEncoding="UTF-8"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><scripttype="text/javascript">//開(kāi)啟網(wǎng)頁(yè)對(duì)話腳本functionopenDialog(url,width,height)(varproperty="status:no;center:yes;resizable:yes;scroll:yes;dialogWidth:"+width+"px;dialogHeight:"+height+"px;";varret=window.showModalDialog(url,'modalDialogwin',property);if(ret==null||ret==""){returnfalse;}returntrue;}//查看待辦工作腳本functionshowork(url){//將url地址進(jìn)行編碼url=encodeURI(url);//alert(url);//調(diào)用openDialog方法開(kāi)啟網(wǎng)頁(yè)對(duì)話框openDialog(url,900,500)}</script><title>待辦工作查看</title></head><body><!--部分代碼略--><tableborder="1"align="center"><tr><td><ahref="#"onclick="javascript:showork('leavesp?work=部門主管審批')">查看待辦工作</a></td></tr></table></body></html>頁(yè)面部分就一個(gè)超連接,用來(lái)開(kāi)啟一個(gè)網(wǎng)頁(yè)對(duì)話框,只是開(kāi)啟的這個(gè)對(duì)話框中請(qǐng)求的不是一個(gè)物理的頁(yè)面,而是請(qǐng)求的一個(gè)servlet(leavesp),而且url中帶有中文參數(shù)值(?work=部門主管審批)。為了處理中文亂碼部分能夠在整個(gè)WEB系統(tǒng)中都能夠使用到,所以將中文亂碼處理寫成了一個(gè)Filter(過(guò)濾器),并在web.xml中配置所有的請(qǐng)求都將經(jīng)過(guò)這個(gè)Filter進(jìn)行過(guò)濾。Filter部分的代碼如下:文件名:ProFilter.javapackagecom.util.filters;importjava.io.IOException;importjava_.io.UnsupportedEncodingException;importjava.util.Enumeration;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassProFilterimplementsFilter(protectedFilterConfigfilterConfig;/***初始化*/publicvoidinit(FilterConfigfilterConfig)throwsServletException(this.filterConfig=filterConfig;}/***將inStr轉(zhuǎn)為UTF-8的編碼形式@paraminStr輸入字符串@returnUTF-8的編碼形式的字符串@throwsUnsupportedEncodingException*/privateStringtoUTF(StringinStr)throwsUnsupportedEncodingException(StringoutStr="";if(inStr!=null)(//outStr=.URLDecoder.decode(inStr);//不用decode了,至U這的時(shí)候就巳經(jīng)自動(dòng)decode過(guò)了//將字符串轉(zhuǎn)為UTF-8編碼形式outStr=newString(inStr.getBytes("iso-8859-1"),"UTF-8");}returnoutStr;}/***中文亂碼過(guò)濾處理*/publicvoiddoFilter(ServletRequestsvlrequest,ServletResponsesvlresponse,FilterChainchain)throwslOException,ServletException(//將Servlet請(qǐng)求與響應(yīng)對(duì)象轉(zhuǎn)換成HttpServlet請(qǐng)求與響應(yīng)對(duì)象HttpServletRequestrequest=(HttpServletRequest)svlrequest;HttpServletResponseresponse=(HttpServletResponse)svlresponse;//獲得請(qǐng)求的方式(1.postor2.get),根據(jù)不同請(qǐng)求方式進(jìn)行不同處理Stringmethod=request.getMethod();//1.以post方式提交的請(qǐng)求,直接設(shè)置編碼為UTF-8if(method.equalsIgnoreCase("post"))(try(request.setCharacterEncoding("UTF-8");}catch(UnsupportedEncodingExceptione)(e.printStackTrace();}}//2.以get方式提交的請(qǐng)求else(//取出客戶提交的參數(shù)集Enumeration<String>paramNames=request.getParameterNames();//遍歷參數(shù)集取出每個(gè)參數(shù)的名稱及值while(paramNames.hasMoreElements())(Stringname=paramNames.nextElement();//取出參數(shù)名稱Stringvalues[]=request.getParameterValues(name);//根據(jù)參數(shù)名稱取出其值//如果參數(shù)值集不為空if(values!=null)(//如果參數(shù)值集中只有一個(gè)值if(values.length==1)(try(//調(diào)用toUTF(values[0])函數(shù),(values[0]即第一個(gè)參數(shù)值)方法轉(zhuǎn)換參數(shù)值的字元編碼Stringvlustr=toUTF(values[0]);//并將該值以屬性的形式藏在requestrequest.setAttribute(name,vlustr);}catch(UnsupportedEncodingExceptione)(e.printStackTrace();}}//如果參數(shù)值集中有多個(gè)值else(//遍歷參數(shù)值集for(inti=0;i<values.length;i++)(try(//回圈依次將每個(gè)值調(diào)用toUTF(values[i])方法轉(zhuǎn)換參數(shù)值的字元編碼Stringvlustr=toUTF(values[i]);values[i]=vlustr;}catch(UnsupportedEncodingExceptione)(e.printStackTrace();}}//將該值以屬性的形式藏在requestrequest.setAttribute(name,values);}}//設(shè)置響應(yīng)方式和支持中文的字元集response.setContentType("text/html;charset=UTF-8");//繼續(xù)執(zhí)行下一個(gè)filter,無(wú)一下個(gè)filter則執(zhí)行請(qǐng)求chain.doFilter(request,response);}/***銷毀方法*/publicvoiddestroy()(}}過(guò)濾器部分,可用來(lái)處理頁(yè)面提交的post和get方法產(chǎn)生的中文亂碼問(wèn)題。Post方式提交的數(shù)據(jù)(form表單中提交的數(shù)據(jù))只需要進(jìn)行請(qǐng)求字符編碼設(shè)置request.setCharacterEncoding("UTF-8");和響應(yīng)設(shè)置response.setContentType("text/html;charset=UTF-8");設(shè)置就可以了。Get方式提交的數(shù)據(jù)會(huì)包含在url中,(如:leavesp?work=部門主管審批),則需要取出參數(shù)名:Enumeration<String>paramNames=request.getParameterNames();(如:work)和取出參數(shù)值:Stringvalues[]=request.getParameterValues(name);(如:部門主管審批),然后再將參數(shù)值進(jìn)行編碼轉(zhuǎn)換:outStr=newString(inStr.getBytes("iso-8859-1"),"UTF-8");過(guò)濾器寫好這后就需要到web.xml中<web-app>與〈/web-app>之間進(jìn)行配置了,web.xml中配置如下:<!--配置過(guò)濾器--><filter>description>處理中文亂碼過(guò)濾器</description>filter-name>ProFilter</filter-name>filter-class>com.util.filters.ProFilter</filter-class></filter><filter-mapping>filter-name>ProFilter</filter-name>url-pattern>*</url-pattern><!--過(guò)濾所有請(qǐng)求,注:tomcat5請(qǐng)用/*--></filter-mapping>這樣配置之后只要頁(yè)面有任何請(qǐng)求都會(huì)通過(guò)ProFilter進(jìn)行中文處理了,就不會(huì)再發(fā)生中文亂碼問(wèn)題了。那一串通過(guò)get傳遞過(guò)來(lái)的中文處理過(guò)程如下:在jsp頁(yè)面的JavaScript里面進(jìn)行編碼處理:url=encodeURI(‘leavesp?work=部門主管審批’)編碼后結(jié)果:url=leavesp?work=%E9%83%A8%E9%97%A8%E4%B8%BB%E7%AE%A1%E5%AE%A1%E6%89%B9因?yàn)樵趙eb.xml過(guò)濾器配置為<url-pattern>*</url-pattern>所以所有請(qǐng)求將會(huì)通過(guò)過(guò)濾器進(jìn)行處理,此過(guò)濾器處理過(guò)程如下:2.1獲得參數(shù)名集合:Enumeration<String>paramNames=request.getParameterNames();Stringname=paramNames.nextElement();2.1結(jié)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年推拉窗用聚碳滾針滑輪行業(yè)深度研究分析報(bào)告
- 海外餐飲春節(jié)營(yíng)銷方案策劃
- 2025年中國(guó)中央處理部件行業(yè)發(fā)展前景預(yù)測(cè)及投資戰(zhàn)略咨詢報(bào)告
- 2025年度排他性知識(shí)產(chǎn)權(quán)許可合同
- 制動(dòng)帶項(xiàng)目可行性研究報(bào)告
- Unit 5 Those are pandas. Lesson 1(教學(xué)設(shè)計(jì))-2024-2025學(xué)年重大版英語(yǔ)四年級(jí)上冊(cè)
- 社科創(chuàng)新科研項(xiàng)目結(jié)題報(bào)告書范文
- 調(diào)壓設(shè)施次高壓燃?xì)夤艿理?xiàng)目建議書
- 2025年度車庫(kù)租賃合同及停車場(chǎng)安全監(jiān)控系統(tǒng)建設(shè)
- 2025年水電站計(jì)算機(jī)監(jiān)控裝置項(xiàng)目建議書
- 品質(zhì)月工作總結(jié)
- 2024年貴州水投水務(wù)集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- (完整版)ERP流程及操作手冊(cè)
- 接上童氣:小學(xué)《道德與法治》統(tǒng)編教材研究
- 武器講解課件
- 高三二輪專題復(fù)習(xí)化學(xué)課件-分布系數(shù)(分?jǐn)?shù))圖像
- 支委委員辭去職務(wù)申請(qǐng)書
- 【橋梁工程的發(fā)展趨勢(shì)與思考5300字】
- GB/T 35274-2023信息安全技術(shù)大數(shù)據(jù)服務(wù)安全能力要求
- 新員工入職公司級(jí)安全教育培訓(xùn)課件
- 新能源材料與器件PPT完整全套教學(xué)課件
評(píng)論
0/150
提交評(píng)論