發生中文亂碼通常出如今下面三種狀況中:html
①表單form中java
由於表單在提交請求的數據的時候也能夠帶參數。好比:瀏覽器
<from action='/UsersManager3/UserClServlet?type=update' method='post'>安全
(1)post服務器
解決方法:request.setCharacterEncoding("utf-8");// gbk gb2312 big5函數
(2)get工具
寫一個工具類post
package com.hsp.utils; public class MyTools { public static String getNewString(String str) { String newString = ""; try { newString = new String(str.getBytes("iso-8859-1"), "utf-8"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return newString; } }
②超連接測試
<a href="http://www.sohu.com?name=函數">測試</a>spa
該方法和get處理方法同樣。
③sendRedirect()發生亂碼
response.sendRedirect("servlet 地址?username=順平"); //此時客戶端向服務器端發送了一個請求。
說明一:
特別說明,若是你的瀏覽器是ie6或如下版本,且中文是奇數的時候 ,則咱們的②和③中的狀況依然會出現亂碼。
解決方法是:
第二種狀況的解決方法:
String info = java.net.URLEncoder.encode("你好嗎.jpg", "utf-8");
<a href="http://http://www.sohu.com?name=" + info>測試</a>
第三種狀況的解決方法:
String info = java.net.URLEncoder.encode("你好嗎.jpg", "utf-8");
response.sendRedirect("servlet地址?username=" + info);
說明二:
咱們應當儘可能使用post方式提交。由於其安全,提交的數據量也更大。
說明三:
在服務器端是中文,在response的時候,也要考慮瀏覽器顯示是否正確,通常咱們經過response.setContentType("text/html;charset=utf-8");設置回送的中文的格式。
另外在這個知識點上補充一個知識點:當咱們下載文件的時候,可能提示框是中文亂碼,解決方法:
String temp = java.net.URLEncoder.encode("傳奇.mp3", "utf-8");
response.setHeader("Content-Disposition", "attachment; filename=" + temp);