Java中亂碼

         Java開發中常常會遇到亂碼問題。網上提供了各類解決亂問題的方案,好比說Http請求的中文亂碼問題,能夠經過URLEncoder和URLDecode去解決,雖然問題解決了,可是不優雅,你會發現爲了解決亂碼問題,代碼中增長了幾行代碼,並且請求端和響應端都要增長URLEncoder和URLDecoder的代碼,兩邊的人員都不爽,都指定了字符集了,還要轉碼,這樣很不優雅。html

        其實解決亂碼問題很簡單,亂碼出現的地方確定是有數據流操做,咱們須要秉承一個原則「用什麼字符集寫,就應該用什麼字符集讀」。web

       常見中文亂碼解決方案:服務器

       1.HTTP的POST請求中文亂碼能夠經過過濾器去設置HttpRequest的字符集。app

       2.HTTP的GET請求中文亂碼解決方案有兩種,一種是new String(request.getParamter("name").getByte("ISO-8859-1"),"UTF-8");另一種方案,是經過web服務器指定URL請求的字符集。spa

       3.Response能夠經過response.setCharacterEncoding("UTF-8");response.setContentType("application/html; charset=utf-8");來設置響應信息的字符集code

       4.最後一種狀況常常讓人抓狂,明明本身設置了Response的字符集,可是仍是亂碼。呵呵,丫的,PrintWriter out = response.getWriter();須要在3步後面。就是說先指定響應信息的字符集,而後根據這個字符集獲取輸出流,不然響應的默認字符流是ISO-8859-1。htm

       5.文件操做時,記住寫入的流的字符集,讀出來的流要使用寫時候的字符集,解決中文亂碼問題。utf-8

       總結:用什麼字符集去寫,就須要用什麼字符集去讀。資源

      多說一些,網上不少提出了 new String(val.getByte("ISO-8859-1"),"GBK");這個東西常常誤人子弟,若是你的val字符串其實是已經根據指定字符集的字符串,解決亂碼問題仍是堅持原則,追根溯源!網上的資源須要認真篩選。開發

相關文章
相關標籤/搜索