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字符串其實是已經根據指定字符集的字符串,解決亂碼問題仍是堅持原則,追根溯源!網上的資源須要認真篩選。開發