在开发中,很多人会遇到使用Request对象接收表单请求参数会遇到中文乱码,至于怎么处理呢?只需要了解其产生乱码的原因,处理起来还是很容易的,接下来用代码演示:
* Request接收中文数据
*/
public class RequestDemo3 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* 演示get方式处理中文乱码
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// get接收数据:(开发中不常用)
/**
* get方式产生乱码的原因:
* * get方式提交的数据在请求行的url后面,在地址栏上其实就已经进行了一次编码了
* * 解决方案:
* * 将存入到request缓冲区中的值以ISO-8859-1的方式获取到,以UTF-8的方式进行解码
*/
String name = request.getParameter("name");
// 方式一:
String encode = URLEncoder.encode(name, "ISO-8859-1");
String decode = URLDecoder.decode(encode, "UTF-8");
System.out.println("姓名:"+decode);
// 方式二:(开发中常用)
String value = new String(name.getBytes("ISO-8859-1"),"UTF-8");
System.out.println("姓名:"+value);
}
/**
* 演示post方式处理中文乱码
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// post接收数据:(开发中常用)
/**
* 产生乱码的原因:
* * post方式提交的数据是在请求体中,request对象接收到数据之后,放入request缓存区中.缓冲区中就有编码(默认ISO-8859-1:不支持中文)
* * 解决方案:
* * 将request的缓冲区的编码修改即可.
*/
// 设置缓冲区的编码
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
System.out.println("姓名:"+name);
}
}