碰見這個問題時腦子是一坨漿糊,平時沒關注這個細節 ,第一反應是百度,可是嘗試了一些方法並不能解決問題,最終以爲本身理解的太淺,繼續嘗試下去沒什麼意義。瀏覽器
網上搜了一下各類編碼格式的定義,對於大腦簡單的我來講,這些定義太複雜。總結了一下,目前咱們通常作開發時用UTF-8的格式,它屬於unicode編碼。要想不出現亂碼現象,就必須注意一點,從前臺到後臺再到前臺的格式保持一致。tomcat
我遇到的問題是這樣的:eclipse
前臺頁面文件的編碼格式爲UTF-8,也就是 <meta charset="UTF-8">,而後頁面有個地方用到href到後臺,href裏面帶了中文參數,到後臺後發現這些中文亂碼,我覺得只要我eclipse設置編碼格式是UTF-8與前臺一致就沒問題,可是其實href傳過來的格式並非UTF-8,應該是隻是頁面的內容確實是UTF-8,可是href應該跟瀏覽器有關,並不必定是這種格式,因此到後臺後亂碼了。解決方法有三種:編碼
1.最簡單的方法是改tomcat的server.xml文件,添加URIEncoding="UTF-8" 這個意思就是設置數據傳輸的時候編碼。code
2.網上也有用encodeURIComponent的方法的,嘗試了一下,也是能夠的,原理也是同樣的,在前臺將中文先經過encodeURIComponent(encodeURIComponent(中文參數))對中文進行兩次編碼,後臺用 URLDecoder.decode(中文參數,"UTF-8")解碼,最終 也是在後臺轉換成UTF-8。server
3.在前臺對中文進行一次次編碼 encodeURIComponent(中文參數),後臺用String str=new String(request.getParameter("中文參數").getBytes("ISO8859-1"), "UTF-8")獲取。xml
後來又嘗試了一下,不論前臺一次仍是兩次編碼,後臺用String str=new String(request.getParameter("中文參數").getBytes("ISO8859-1"), "UTF-8")獲取均可以成功,可是若是後臺用URLDecoder.decode(),那麼前臺必須有兩次編碼。ip