中文亂碼問題

一、概述

出現亂碼是非常簡單的一件事,就是服務器和客戶端沒有用同一種解碼和編碼方式導致的。這裏密切關注:myeclipse下的服務器默認的解碼方式是iso8859-1,所以不管客戶端提交的是什麼編碼形式的,就必需要經過解碼。

二、服務器返回數據出現亂碼(兩個辦法)

方法一、服務器端指定某一種編碼類型,來返回數據

response.getOutputStream().write("登陸失敗".getBytes("utf-8"));

方法二、客戶端使用與服務器一樣的編碼類型來解碼字符串。

myeclipse中默認使用的是GBK,我們用GBK來解碼就可以了。

String res=bos.toString("GBK");

三、客戶端提交數據出現亂碼(兩個步驟)

  1. 客戶端要修改中文的數據編碼,使用URLEncoder.encode對中文進行編碼

    String path = "http://10.0.2.2:8080/day05/LoginServlet?name="+name+"&pwd="+URLEncoder.encode(pwd, "utf-8");
  2. 服務器拿到數據之後,要讓其回到最初的狀態,然後再使用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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章