中文的编码方式取决于浏览器,chrome为UTF-8,IE为GB2312,这是由于浏览器并没有遵循URI编码规范。有两种解决方法:
开发过程中,将查询字符串提前编码,
如: http://www.baidu.com/demo?demo=%D6%D0%B9%FA (UTF-8编码)
在Servlet的doGet()方法中添加
String value = http://www.chinaznyj.com//GuoNeiZiXun/new String(request.getParameter("parameterName").getBytes("ISO-8859-1"),"浏览器的编码方式");
表单中的get和post数据包含中文
中文的编码方式取决于上文的contentType中的charset,有两种解决办法:
在Servlet的doPost()方法中添加request.setCharacterEncoding(“charset的值”);(仅对post有用)
在Servlet的doPost()方法中添加
String value = http://www.chinaznyj.com//GuoNeiZiXun/new String(request.getParameter("parameterName").getBytes("ISO-8859-1"),"charset的值");
三、原理
我们通过上面的方法可以解决乱码问题,下面讲讲原理:
客户端发到服务器的数据需要在客户端进行编码,类似于:String parameterName = "中国".getBytes("UTF-8")然后将编码后的数据发到服务器。
客户端接受数据,request.getParameter(“”)的作用就是对接收到的数据进行解码,默认使用ISO-8859-1进行解码,可以使用request.setCharacterEncoding(“”)进行设置,但仅对post有用。假如我们使用默认的ISO-8859-1,肯定乱码,因为编码跟解码不一致,那此时怎么办呢,引出了上文中的两种解决方案:使用request.setCharacterEncoding(“”)改变request.getParameter(“”)的解码方式或者new String(request.getParameter("parameterName").getBytes("ISO-8859-1"),"charset的值")将request.getParameter(“”)解码的数据重新编码再解码。