Http响应和请求的编码问题

来源:互联网 发布:石大access数据库应用 编辑:程序博客网 时间:2024/05/09 20:51

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

0 0
原创粉丝点击