Response與Request中文亂碼的解決

在使用 Java Servlet 開發網站的時候經常會遇到中文亂碼問題,不管是請求(request)還是響應(response)的過程,下面就是中文亂碼的一個簡單總結:

  • 字符流數據寫入

在Servlet中,如果向瀏覽器寫入的內容是中文格式,會由於HttpServletResponse本身的原因(默認編碼格式爲ISO8859-1,不支持中文格式),所以在瀏覽器中不會被識別到。

中文是屬於UTF-8格式,所以需要設置Response以UTF-8的格式寫入數據。設置的方法是使用setCharcterEncoding("UTF-8")設置。

如果只是使用response.setCharacterEncoding("utf-8")的形式只會讓服務器寫入的數據爲UTF-8的形式。但是客戶端瀏覽器的解析編碼格式未進行設置,所以同樣也還會出現亂碼的情況。

未通知瀏覽器以UTF-8解析​​​​​​

因此需要同時通知瀏覽器以UTF-8的格式來解析數據。設置的方式可以通過兩種方式,如下:

// 第一種:包含了response.setCharacterEncoding("UTF-8")
response.setContentType("text/html;charset=UTF-8");
// 第二種:需要和response.setCharacterEncoding("UTF-8")配合使用
response.setHeader("Content-Type","text/html;charset=UTF-8");
  • 字節流寫入

字節流多數用於上傳圖片,一般情況下會因爲上傳文件的名字是中文格式,會由於解析不出來而出錯,所以在使用字節流實現下載功能時,要修改圖片名字的編碼格式。

  • Get請求亂碼

在Get方式提交表單時會出現中文亂碼的問題,這是因爲在Tomcat的底層是採用的是ISO8859-1,所以在使用前需要先對內容進行編碼轉換。

格式編碼轉換設置:

String values = request.getParameter("username");
System.out.println(new String(values.getBytes("ISO8859-1"), "UTF-8"));
  • Post請求亂碼

Get的解決亂碼方式只對Get方法有效,而對Post方式是無效的。它的解決方式是如下:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章