一、概述
出現亂碼是非常簡單的一件事,就是服務器和客戶端沒有用同一種解碼和編碼方式導致的。這裏密切關注:myeclipse下的服務器默認的解碼方式是iso8859-1,所以不管客戶端提交的是什麼編碼形式的,就必需要經過解碼。
二、服務器返回數據出現亂碼(兩個辦法)
方法一、服務器端指定某一種編碼類型,來返回數據
response.getOutputStream().write("登陸失敗".getBytes("utf-8"));
方法二、客戶端使用與服務器一樣的編碼類型來解碼字符串。
myeclipse中默認使用的是GBK,我們用GBK來解碼就可以了。
String res=bos.toString("GBK");
三、客戶端提交數據出現亂碼(兩個步驟)
客戶端要修改中文的數據編碼,使用URLEncoder.encode對中文進行編碼
String path = "http://10.0.2.2:8080/day05/LoginServlet?name="+name+"&pwd="+URLEncoder.encode(pwd, "utf-8");
服務器拿到數據之後,要讓其回到最初的狀態,然後再使用UTF-8(客戶端指定的編碼類型)來進行解碼
//這裏收到的字符串,默認就是用的是ISO-8859-1來進行解碼了,所以這裏一定會出現亂碼 String pwd = request.getParameter("pwd"); System.out.println("userName="+name +"---pwd="+pwd); pwd = new String(pwd.getBytes("ISO-8859-1") , "utf-8"); System.out.println("userName="+name +"-編碼後的--pwd="+pwd);