被坑死了的中文亂碼

         最近在調試一個接口。然後,就被中文亂碼給坑了。

     事情的經過是這樣的,領導讓我跟其他服務器的接口進行對接,簡單點就是我這邊暴露一個http的請求地址給對方,然後對方發請求到我這邊。然後,對方請求時,使用的是GBK編碼的GET請求,然後,中文到我這邊就亂碼了。

     最初,我這邊的tomcat使用的是UTF-8編碼。然後,接到對方請求後,怎麼轉都轉不過來中文。當初不想改tomcat的配置,我就將(GBK、UTF-8、GB2312、ios-8895-1)這四種編碼來回轉啊!怎麼就轉不過來。

     後來,沒辦法。那就只能改我這邊tomcat的編碼了。把server.xml裏面的URIEncoding設置成了GBK編碼的格式。然後我就歡天喜地的去找對方調試,並信誓旦旦的說沒問題了。但是,請求過來以後,悲劇又來了。還是沒有轉過來。還是繼續亂碼,當時跳樓的心都有了(公司是6樓,摔得可疼)。

     然後,接下來就是繼續找資料,查方法。最後,就把問題的解決點放在了Struts2的國際化,默認編碼格式了。Struts2的核心包裏面有一個default.properties文件,裏面有一個struts.i18n.encoding=UTF-8的設置。也就是說,Struts2默認,UTF-8。悲了個劇的,接下來就是要把這個默認的更改過來。具體的更改方法有兩種:

      第一,直接用壓縮軟件打開你的struts核心包,然後找到default.properties文件,將裏面的配置改了。但是這個方法不夠靈活,因爲如果想換其他的格式就悲了個劇了。

      第二,在classpath下,增加一個配置文件struts.properties,在這個文件裏面你可以設置很多配置來覆蓋struts的默認配置。這個也是最靈活的修改

      然後,接下來兩個配置都改了,興奮的去接收請求,還是會有亂碼。然後,有研究了一番。最終接收GBK格式的GET請求的接收方法如下:

         URLDecoder.decode(httpServletRequest.getParameter("param"), "GBK");

         但是,問題又來了。UTF編碼格式的有亂碼了,繼續研究,然後針對UTF-8的接收是這樣的,

        String param = URLEncoder.encode(httpServletRequest.getParameter("param", "GBK");

        String utpParam = URLDecoder.decode(param , "UTF-8");

        最後,總結。上面標紅的是需要修改內容。由於我這邊的系統,是可以明確知道是什麼類型什麼編碼請求過來,所以我做了一個配置,對於不同的請求使用不同的參數獲取方法。但是,對於一些系統。不知道請求的具體格式。我這種方法就不適用。所以,這個後期還是需要繼續優化研究的。如果,哪位大神有好的解決方法,也請多多噴水告知。在下細聽便是。

發佈了26 篇原創文章 · 獲贊 12 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章