資源描述:
《java開發(fā)亂碼問題處理大全》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、java開發(fā)亂碼問題處理大全亂碼對于使用非英語文字程序員基本上是一直纏繞在身邊的麻煩事,這個(gè)誰也避免不了。下面是我解決亂碼時(shí)候的一點(diǎn)小經(jīng)驗(yàn)。歡迎指正一、避免亂碼的一些注意點(diǎn):1.盡量使用統(tǒng)一的編碼,如果你是重頭開發(fā)一個(gè)系統(tǒng),特別是Java開發(fā)的,推薦從頁面到數(shù)據(jù)庫再到配置文件都使用UTF-8進(jìn)行編碼,安全第一。2.SetCharacterEncodingFilter的使用,這個(gè)東西不是萬能的,但是沒有它就會(huì)很麻煩,如果是基于Servlet開發(fā)的東西,能用的就給它用上,省心。不過有一個(gè)注意的地方,這個(gè)F
2、ilter只是對POST請求有效,GET一律忽略,不信你可以debug一下,看看它怎么做的,至于為什么不過濾get請求,好象是它對GET請求是無能為力的。3.就如上面所說,GET請求有問題,盡量使用POST請求,這個(gè)也是Web開發(fā)的一個(gè)基本要領(lǐng):WebHealthWarning:PutAllDestructiveActionsBehindaPOSTmethod(fromAgileWebDevelopmentwithRails)有點(diǎn)扯遠(yuǎn)了,不過少用GET,是會(huì)有回報(bào)滴。4.JavaScript和Ajax
3、亂碼的避免,注意JavaScript默認(rèn)是ISO8859的編碼,避免JS/AJAX亂碼和GET一樣,不要在URL里面使用中文,實(shí)在避免不了,就只能在生成鏈接的時(shí)候轉(zhuǎn)碼,絕對不能想當(dāng)然的認(rèn)為SetCharacterEncodingFilter會(huì)幫你做什么事情。5.盡早統(tǒng)一開發(fā)環(huán)境,早點(diǎn)模擬真實(shí)環(huán)境測試,這個(gè)好像也有跑題的嫌疑,但凡軟件開發(fā)都是這么干的,但仍然值得注意。我這出現(xiàn)過一次狀況,程序是在Win下編譯的,拿去Linux上測試沒問題,等實(shí)際部署的時(shí)候代碼是在Linux下編譯,結(jié)果亂碼,秋后算帳總覺得
4、有點(diǎn)晚。二、亂碼發(fā)生的情況和應(yīng)對措施1.開發(fā)環(huán)境亂碼由于Java默認(rèn)使用UTF-8編碼,而且網(wǎng)上很多人都建議Struts開發(fā)的時(shí)候應(yīng)盡量選用UTF-8做為默認(rèn)編碼,而非GBK。IDE使用Eclipse,在第一次使用Eclipse的時(shí)候應(yīng)將defaulttexteditor改為UTF-8編碼,免得日后后悔再改就慘了,我本次開發(fā)的時(shí)候就忽視了這一點(diǎn),剛開始沒注意,結(jié)果到快交工時(shí)亂碼問題無法解決,導(dǎo)致將所有的文件全部修改一遍,嗚……自打使用Ubuntu,我就開心的笑阿,再也不用為搞這些亂碼問題而煩惱^^(U
5、buntu公益廣告)2.POST請求的過濾這個(gè)是最基本的了,每個(gè)Servlet系統(tǒng)基本都會(huì)用到這個(gè)東西。不過只對POST請求有效,這個(gè)挺關(guān)鍵的。使用SetCharacterEncodingFilter,這個(gè)很基礎(chǔ)的一套過濾器,將所有來自頁面的POST請求全部過濾為UTF-8編碼。3.JSP,HTML頁面亂碼將JSP頁面全部改為charset=UTF-8,這樣可以保證與后臺(tái)交互的時(shí)候都是UTF-8編碼,一般應(yīng)用做了以上工作就基本可以應(yīng)付了。4.資源文件中漢字轉(zhuǎn)化UTF-8字符問題國際化問題,在使用資源文
6、件的時(shí)候,由于中文在properties文件中無法被程序所識別,需要將其進(jìn)行轉(zhuǎn)碼,我在資源文件下面制作了一個(gè)很簡單的bat文件,每次修改資源文件的時(shí)候都是在一個(gè)臨時(shí)文件中修改,然后執(zhí)行這個(gè)bat文件,將其轉(zhuǎn)化并保存為所需要的資源文件,這個(gè)動(dòng)作挺煩的,也有項(xiàng)目組成員使用一些插件,但是那些東西都是直接寫UTF-8碼的,有時(shí)候反倒不方便,不過以后任務(wù)量巨大的時(shí)候可能會(huì)考慮使用。Bat文件內(nèi)容:setpath=%path%;%JAVA_HOME%/bin/,native2ascii-encodingUTF-8
7、ApplicationResources_bk.txt>ApplicationResources_zh.propertiesPS:上面的方法好老了,實(shí)際操作起來相當(dāng)麻煩,現(xiàn)在基本都是使用Eclipse插件,Eclipse3.1時(shí)使用PropertyEditor,但是這個(gè)項(xiàng)目看上去好像停擺了,到Eclipse3.2時(shí)改用了ResourseBundle,相當(dāng)?shù)膹?qiáng)勁的一個(gè)插件,推薦使用。5.GET請求亂碼如果在本項(xiàng)目中采用了get方式提交請求并附加參數(shù),結(jié)果導(dǎo)致編碼亂碼,原因是Tomcat默認(rèn)請求編碼是IS
8、O8859,需要在Tomcat的配置文件server.xml添加一個(gè)參數(shù),URIEncoding=”UTF-8”,這樣請求中附件的參數(shù)就會(huì)以UTF-8來進(jìn)行編碼。6.Ajax請求亂碼使用Ajax,JS也是默認(rèn)使用ISO8859編碼,所以在進(jìn)行請求時(shí)遇到中文參數(shù)需要進(jìn)行編碼,如:varurl="GetSelectListAction.do?queryData=subTrade"+"&queryId="+encodeURI(obj.value)+"&r="+