028-86261949

当前位置:首页 > 技术交流 > Servlet中文乱码问题

Servlet中文乱码问题

2017/02/27 16:14 分类: 技术交流 浏览:4

一 问题描述:

当我们从前台发送一个请求到后台的时候,在后台servlet里面接收参数的时候,经常会出现乱码问题,这样就会导致我们拿到的数据不正确,后面的操作就无法进行;这是比较严重的一个问题,比如下面的情况:

前台页面login.html:

里面有一个form表单,提交方式为post,通过点击提交按钮,提交到后台TeacherServlet.java里面进行处理,如下后台代码:

后台TeacherServlet.java:

 

后台在接收到参数之后,打印参数的时候 ,就出现了乱码问题;

二 产生乱码原因

为什么出现这个乱码问题?

当我们浏览器传输过来的编码格式和后台程序编码格式不一致导致乱码问题产生;

三 解决方案

总共有3种解决方案,分别如下;

①当form表单提交方式是post的时候,后台可以通过 req.setCharacterEncoding(“UTF-8”)的方式解决乱码问题:

如下代码:

 

②当form表单提交的方式是get方式的时候,修改tomcat里面server.xml里面的配置信息

,添加URIEncoding=”UTF-8”到配置文件里面;

如下server.xml:

 

前面页面提交方式为get方式:

 

后台servlet里面不需要设置req.setCharacterEncoding(“UTF-8”):

 

如果需要兼容get/post请求怎么办?

可以再servlet.xml配置(解决get请求) ,又可以再后台同时设置req.setCharacterEncoding(“UTF-8”)(解决post请求):

③除了上面两种情况解决方案以外,还可以把接收到参数进行ISO-8859-1的方式拿到byte数组,在把byte数组转换成程序识别的UTF-8的方式;解决乱码问题;

如下操作:

         //接收前台传过来的值
		String username = req.getParameter("username");
		//通过ISO-8859-1方式这种编码格式拿到byte数组
		byte[] nameStr = username.getBytes("ISO-8859-1");
		//在把byte数组通过UTF-8的编码转换成字符串
		String name = new String(nameStr,"UTF-8");
		System.out.println(name);

完整代码如下:

 

四 总结

解决中文乱码问题方式:

①如果post请求,后台servlet里面设置req.setCharacterEncoding(“UTF-8”);

②如果get请求,在server.xml里面配置URIEncoding=”UTF-8”;

③接收参数之后,可以通过ISO-8859-1方式得到byte数组,在把byte数组通过UTF-8方式进行编码操作,得到需要的中文;

#标签:Java技术,Servlet乱码,源码时代