1. 程式人生 > >JavaWeb request獲取引數造成的中文亂碼問題解決方法

JavaWeb request獲取引數造成的中文亂碼問題解決方法

一、亂碼原因

當我們使用request物件,傳送請求時,會對你要獲取的引數進行編碼。在此過程中使用的編碼方式是ISO8859-1的編碼方式。而這種編碼方式是不支援中文的,所以會造成亂碼。

二、解決方法

首先介紹通用的解決方法,對於get和post提交方式都適用
我們先在html中寫入一個簡單的表單,表單的提交方式設定為post
在這裡插入圖片描述
然後我們在service方法中寫入程式碼來獲取我們輸入的姓名,並在控制檯輸出

  String parameter = request.getParameter("username");
  System.out.println(parameter);

執行html檔案,此時我們在瀏覽器中輸入內容,點選提交按鈕後


在這裡插入圖片描述
在這裡插入圖片描述
我們可以看到,在控制檯輸出的內容為亂碼
這是因為獲取引數時採用了ISO8859的編碼方法,所以要想解決問題我們就需要將現在的亂碼轉為亂碼前的二進位制位。再使用UTF-8的編碼方式
在之前的基礎上我們增添增添程式碼,最後再次在控制檯輸出一次編碼後的引數
再次執行,輸入與之前相同的資料,在控制檯中檢視結果

     String parameter = request.getParameter("username");
     System.out.println(parameter);

      //將亂碼轉回用ISO8859-1編碼前的二進位制位
      byte[] bytes = parameter.getBytes("ISO8859-1");
      //再使用UTF-8進行編碼
      parameter = new string(bytes,"UTF-8");
      
      System.out.println(parameter);

在這裡插入圖片描述
可以看到經過重新編碼,中文亂碼問題得到了解決

三、注意事項

剛才我們介紹了通用方法,但我們也可以發現他的弊端,就是如果輸入的資料量很大,就會很繁瑣。所以針對使用post的提交方式我們可以使用一種更為簡單的方式來解決亂碼的問題。
注:使用get的提交方式時該方法不適用! 不適用! 不適用!

對於使用的是post提交方式我們只需要在獲取引數前加上一行程式碼就可以解決問題。

  request.setCharacterEncoding("UTF-8");
  String parameter = request.getParameter("username");
  System.out.println(parameter);

執行程式,輸入資料,再次檢視控制檯的輸出資訊可以看到中文亂碼問題也得到了解決
在這裡插入圖片描述