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("天马行空"); //两种输出方式效果一样