servlet亂碼問題

一.post亂碼html

緣由:java

由於post是以二進制流的形式發送到的服務器。服務器收到數據後,默認以iso-8859-1進行編碼。瀏覽器

解決:tomcat

POST請求亂碼解決,只須要在獲取請求參數以前調用request.setCharacterEncoding(「UTF-8」); 方法設置字符集 便可。以下:服務器

protected void doPost(HttpServletRequest request, 
HttpServletResponse response) throws ServletException, IOException {

    // 1.post請求方式的數據是以二進制流的形式發送到服務器。
    // 2.那麼就說明它缺乏一個字符集。因此咱們要設置請求體的字符集便可。
    // setCharacterEncoding必需要獲取請求參數以前調用纔有效
    request.setCharacterEncoding("UTF-8");

    //獲取客戶端傳遞過來的用戶名參數值
    String username = request.getParameter("username");
    System.out.println("用戶名:" + username);

}

 

二.get亂碼app

緣由:ide

1.頁面提交數據時以utf-8對內容進行編碼
2.把編碼後的內容傳到tomcat服務器post

3.服務器會用ISO-8859-1解碼,致使亂碼this

解決:編碼

解決亂碼的核心思路,就是把獲得的亂碼按照原來亂碼的步驟逆序操做。
一、先以iso-8895-1進行編碼
二、而後再以utf-8進行解碼

1) 第一種方式 使用URLEncoder 和 URLDecoder 兩個類 編解碼 如:
//獲取客戶端傳遞過來的用戶名參數值
    String username = request.getParameter("username");
    System.out.println("用戶名:" + username);

    // 先對用戶名進行解碼獲得%E7%8E%8B%E6%8C%AF%E5%9B%BD 這樣的形式
    username = URLEncoder.encode(username, "ISO-8859-1");

    // 再進行utf-8編碼 一次獲得頁面上輸入的文本內容
    username = URLDecoder.decode(username, "UTF-8");
    System.out.println("亂碼解決後用戶名:" + username);

2) 第二種方式 使用 String類的方法進行編解碼

    username = new String(username.getBytes("ISO-8859-1"), "UTF-8");
    System.out.println("亂碼解決後用戶名:" + username);

解決亂碼的代碼以下:

public class Params2 extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {

    //獲取客戶端傳遞過來的用戶名參數值
    String username = request.getParameter("username");
    System.out.println("用戶名:" + username);


    // 先對用戶名進行編碼獲得%E7%8E%8B%E6%8C%AF%E5%9B%BD 這樣的形式
    //  username = URLEncoder.encode(username, "ISO-8859-1");

    //再進行utf-8解碼 一次獲得頁面上輸入的文本內容
    //  username = URLDecoder.decode(username, "UTF-8");

    //      System.out.println("亂碼解決後用戶名:" + username);

    // 先iso-8859-1編碼,再utf-8解碼       
    username = new String(username.getBytes("ISO-8859-1"), "UTF-8");

    System.out.println("亂碼解決後用戶名:" + username);


    // 獲取密碼
    String password = request.getParameter("password");
    System.out.println("密碼:" + password);
}

}
View Code

 

三.返回瀏覽器中文亂碼

緣由:

主要是由於服務器輸出的字符串的編碼和客戶端顯示字符串的編碼不一致。致使亂碼問題

解決:

咱們只須要設置服務器和客戶端的編碼相同就能夠解決這個問題。

設置服務器的字符串編碼

    //設置服務器輸出的編碼爲UTF-8
    response.setCharacterEncoding("UTF-8");

設置客戶端的字符串顯示編碼。

    //告訴瀏覽器輸出的內容是html,而且以utf-8的編碼來查看這個內容。
    response.setContentType("text/html;charset=utf-8");

這兩行語句要在獲取輸出流以前執行。纔會生效。

protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {

    //設置服務器輸出的編碼爲UTF-8
    response.setCharacterEncoding("UTF-8");

    //告訴瀏覽器輸出的內容是html,而且以utf-8的編碼來查看這個內容。
    response.setContentType("text/html; charset=utf-8");

    // 經過response響應對象獲取到字符輸出流
    Writer writer = response.getWriter();
    // 往 客戶 端 輸出數據。
    // writer.write("this is response content!");

    // 輸出中文數據到客戶端
     writer.write("這是中文的輸出");
}

 

 再次經過瀏覽器訪問。獲得的是正確的中文
相關文章
相關標籤/搜索