更新時(shí)間:2022-03-14 10:17:00 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1627次
request.setCharacterEncoding(編碼);
只有一種方法,但我們有不同的方法,初學(xué)者會(huì)直接在JSP頁(yè)面中使用,而有經(jīng)驗(yàn)的程序員會(huì)使用過(guò)濾器。現(xiàn)在的方法是說(shuō)過(guò)濾器。這里統(tǒng)一使用UTF-8編碼為例進(jìn)行說(shuō)明。具體過(guò)程就不多說(shuō)了,網(wǎng)上有很多教程。有點(diǎn)懶,把TOMCAT抄過(guò)來(lái)就行了。TOMCAT 目錄下的“webapps” jsp-examples “WEB-INF” classes “filters” 找到SetCharacterEncodingFilter.java 這個(gè)類(lèi)進(jìn)入你的程序并配置映射路徑。配置完你的垃圾問(wèn)題基本解決了。但我想映射路徑警告是你不能使用'*'
< Filter-Mapping > < filter-name > Set Character Encoding </ filter-name > < servlet-name > * </ servlet-name > </ filter-Mapping >
如上如此配置(也許是網(wǎng)上大部分教程的方法,我記得也對(duì)我造成了傷害),你可能只解決了JSP亂碼,需要解決STRUTS的亂碼映射*.do或servletActionName。設(shè)置初始化參數(shù)編碼中的值就行了。
< init-param > < param-name >編碼</ param-name > < param-value > UTF-. 8 </ param-value > </ init-param >
當(dāng)然,最重要的是要記住,按照前面提到的方法,你使用的保存文件的編碼編輯器的更改必須與使用的字符編碼保持一致。
在JSP的內(nèi)容中,比如網(wǎng)上的教程或者使用說(shuō)的那種招數(shù),把所有的頁(yè)面加到最上面:
<% @Page Language = "Java" contentType = " text / HTML; charset = UTF - .8 "
pageEncoding = "UTF - .8 " %>
至此,相信JSP、ACTION亂碼都不太可能出現(xiàn)。
資源文件大家都知道國(guó)際支持是不可或缺的,如果資源文件出現(xiàn)亂碼也很可怕?其實(shí)資源文件亂碼是一個(gè)很好的解決辦法,其原因是因?yàn)槭褂肬TF-8編碼的文件作為JSP代碼,不會(huì)導(dǎo)致資源文件發(fā)生相應(yīng)的變化,所以只要保存資源文件的編碼即可改正,垃圾問(wèn)題就解決了。當(dāng)然,你要使用中文native2ascii命令進(jìn)行適當(dāng)?shù)霓D(zhuǎn)換。
其實(shí)JS亂碼還是跟編碼文件有關(guān)系,如果JS中有中文,那么保存JS文件編碼必須現(xiàn)在調(diào)用這個(gè)頁(yè)面編碼相同的JS否則,所有你要從中文JSP傳過(guò)來(lái)的頁(yè)面JS出現(xiàn)正常. 可見(jiàn)對(duì)于JS出現(xiàn)亂碼調(diào)用是最容易解決的。
本來(lái)的目的,當(dāng)然是跟AJAX相關(guān)的編碼亂碼問(wèn)題,其實(shí)很多人和我一樣想到文件編碼設(shè)置,在編碼設(shè)置requet訪問(wèn)數(shù)據(jù)集在響應(yīng)數(shù)據(jù)返回編碼一切都會(huì)很順利,但一切都是徒勞的,討厭的垃圾再次出現(xiàn)在你面前。N 之后你嘗試了各種方法,包括 JS 自己的 escape、unescape 方法,你發(fā)現(xiàn)屏幕上仍然瘋狂出現(xiàn)垃圾。
其實(shí)這個(gè)方法試過(guò)N多之后,很多人都找不到很簡(jiǎn)單的解決方法,而它的答案就在于我們處理過(guò)的JSP亂碼。再來(lái)看看經(jīng)典的AJAX請(qǐng)求方式代碼
xmlhttp.open(“POST”,URL,異步);
xmlhttp.setRequestHeader("內(nèi)容-類(lèi)型", "text/HTML");
xmlhttp.send(參數(shù));
通過(guò)前面的描述,你現(xiàn)在不知道辨別沒(méi)有。不知道是受網(wǎng)上教程的影響還是其他方面的影響,setRequestHeader 和是同年的,沒(méi)有人希望它改變過(guò)去,但問(wèn)題只是出了這個(gè)地方?;叵胍幌翵SP頁(yè)面的內(nèi)容編碼設(shè)置,這里有這樣一個(gè):
contentType = "文本/html;字符集 = UTF-8"
問(wèn)題現(xiàn)在知道了,所以我們需要把代碼改成第二句:
xmlhttp.setRequestHeader ("Content-Type", "text/html; charset = UTF-8");
最后,不要忘記在返回?cái)?shù)據(jù)時(shí)也設(shè)置:
response.setContentType(“文本/XML”);
response.setCharacterEncoding("UTF-.8");
如果要問(wèn)為什么,那么,其實(shí)我們可以看成是一個(gè)臨時(shí)的xmlhttp頁(yè)面,它是由瀏覽器動(dòng)態(tài)生成的,主要作用是在后臺(tái)獲取請(qǐng)求的數(shù)據(jù)(可以看成一個(gè)高級(jí)iframe )。所以對(duì)于普通的編碼設(shè)置頁(yè)面,應(yīng)該是一樣的設(shè)置。servlet中的返回?cái)?shù)據(jù)為什么設(shè)置contentType和encoding其原因是一樣的。眾所周知,它是jsp servlet的最后一種形式,而jsp top設(shè)置的內(nèi)容其實(shí)就是讓生成的servlet生成這么兩句話(huà):
response.setContentType(“文本/HTML”);
response.setCharacterEncoding("UTF-.8");
pageEncoding現(xiàn)在jvm描述了這個(gè)頁(yè)面的內(nèi)容保存你想用什么編碼(生成后跟CLASS有關(guān)系)。因此在 servlet 響應(yīng)中設(shè)置編碼是被授予的。
response.setContentType ("text/xml; charset = UTF-8");
response.setHeader("Pragma", "no-cache");//HTTP 1.0
response.setDateHeader("Expires", 0);//防止在代理服務(wù)器緩存
PrintWriter out = response.getWriter();
out.write (outXML);
out.flush();
out.close();
寫(xiě)給客戶(hù)端中文數(shù)據(jù)是UTF-8編碼,客戶(hù)端js腳本拿到request.responseXML也好,responseText還是,里面的數(shù)據(jù)不會(huì)亂碼。
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)