1.HttpServletRequest請求中的編碼一致
通過Html的表單<form>向伺服器提交資料,在Servlet中通過request.getParameter(key)來獲得參數值,由於Http請求的預設字元編碼為ISO-8859-1,需要在獲得參數值之後進行字元編碼轉換。E.g.
Html表單:
<form action="/TestPro/servlet/CheckServlet">
輸入:<input type="text" name="name" />
<input type="submit"/>
</form>
CheckServlet:
String name = request.getParameter("name");
String name_u = new String(name.getBytes("ISO-8859-1"), "utf-8");
【注意】此處之所以是轉化為utf-8的編碼格式,是因為<form>表單的編碼格式是utf-8。在html的<head>中:
<meta http-equiv="content-type" content="text/html; charset=utf-8">
當然此處的charset也可以指定為GB2312,同時在request中獲得參數後,轉化後的編碼格式也得是GB2312,否則會出現亂碼。
2.HttpServletResponse響應中的編碼
HttpServletResponse有兩種方式響應Brower,一種是OutputStream位元組流,二種是PrintWriter字元流。
2.1 OutputStream位元組流(位元組流的編碼格式與ContentType的編碼格式要一致)
response.getOutputStream().write("天馬行空".getBytes("utf-8"));
response.setContentType("text/html;charset=utf-8");
//也可以通過以下兩種方式
response.setHeader("Content-Type","text/html;charset=utf-8");
//或者
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
2.2 PrintWriter字元流(只需指定ContentType的編碼格式)
response.setContentType("text/html;charset=GB2312");
PrintWriter out = response.getWriter();
Out.println("天馬行空");
Out.write("天馬行空"); //兩種輸出方式效果一樣