更新時(shí)間:2022-05-07 11:11:04 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2765次
java的亂碼問題一直很是煩人,動(dòng)力節(jié)點(diǎn)小編來給大家總結(jié)一下。

這種情況比較好解決,只需在servlet中加入request.setCharacterEncoding("utf-8");即可,當(dāng)然也可以是其他的編碼方式。
但是必須注意一點(diǎn):因?yàn)樵趫?zhí)行第一行request.getParameter();時(shí),servlet已經(jīng)將所有的參數(shù)得到,將他們放到容器中,以后再次執(zhí)行request.getParameter();去其他參數(shù)時(shí),只不過從servlet容器中拿而已。所以request.setCharacterEncoding("utf-8");必須放到第一個(gè)request.getParameter();前面,才能確保拿到的參數(shù)不會(huì)出現(xiàn)亂碼,否則它不會(huì)起到任何作用。當(dāng)然解決post方式提交亂碼的最好方案,還是寫一個(gè)過濾器。
這是一種比較復(fù)雜的情況,首先瀏覽器會(huì)對(duì)URL中的中文參數(shù)進(jìn)行編碼,一般是utf-8。然后web容器會(huì)對(duì)URL中的參數(shù)進(jìn)行解碼,以tomcat為例,在“Connecto”標(biāo)簽中設(shè)置URIEncoding="utf-8",tomcat會(huì)對(duì)參數(shù)進(jìn)行解碼,這時(shí)在servlet中拿到的就是中文。
但往往事與愿違,如果不在tomcat中配置“URIEncoding”時(shí)(這種情況恐怕最多),它默認(rèn)的是“iso-8859-1”,以這種方式解碼,在servlet中肯定是亂碼了。
所以解決get方式亂碼有三種:
第一,在tomcat的“Connecto”標(biāo)簽中設(shè)置URLEncoding="utf-8"。
第二,在servlet中加入一行代碼:String parameter= new String(parameter.getBytes("iso-8859-1"),"utf-8");。
第三,也是最徹底的一種,在提交之前,首先對(duì)參數(shù)進(jìn)行兩次編碼。例如使用java的URLEncoder.encode();對(duì)參數(shù)進(jìn)行兩次編碼,然后再將參數(shù)傳入到頁面;或者使用JavaScript的編碼方式encodeURIComponent() 對(duì)參數(shù)兩次編碼。這樣做,不管tomcat是何種解碼,都無所謂,這是因?yàn)楫?dāng)對(duì)參數(shù)編了一次碼后,已經(jīng)是英文了,這時(shí)再對(duì)它進(jìn)行一次編碼和解碼,無論是什么編碼和解碼方式,得到的都是第一次編過碼的形式。那么在servlet中只需要用URLDecoder.decode(parameter,"utf-8");,即可得到中文參數(shù)。
以上就是關(guān)于“告訴你Java亂碼怎么解決”的介紹,大家如果想了解更多相關(guān)知識(shí),不妨來關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java在線學(xué)習(xí),里面的課程內(nèi)容從入門到精通,細(xì)致全面,比較適合沒有基礎(chǔ)的小伙伴學(xué)習(xí),希望對(duì)大家能夠有所幫助哦。
相關(guān)閱讀
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)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)