表单提交数据(post、get)中文乱码问题总结
1:表单在前端以post方式提交数据:
当浏览器向服务器发送数据(假设是“中国”)时,它必须查码表,把数据(“中国”)转换成0101的二进制数据。浏览器通过码表打开网页,浏览器通过码表提交数据(“中国”)。数据(“中国”)到服务器后,必须把数据(“中国”)封装成 。 中调用的方法返回一个字符串(“中国”)。方法拿到里面的数字后,必须转换成字符,还必须查码表。由于设计者是外国人,默认是-1,他们经常用这个。这就是请求数据乱码的根本原因。
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//请求数据的中文乱码问题
//客户端网页我们控制为UTF-8
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
//获取数据正常,输出数据时可以查阅不同码表
System.out.println(username);
//通知服务器发送数据时查阅的码表
response.setCharacterEncoding("UTF-8");//通知浏览器以何种码表打开
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.write(username);
}
2:表单在前端以get方式提交数据:
通过get方法提交的数据(“中国”)还是按照浏览器打开的码表来发送的,不同的是,通过get方法提交数据(“中国”)时,编码设置无效,即使设置了UTF-8,还是会校验-1,得到(??)。要解决这个问题,需要先用(??)反向校验-1,得到(“中国”),然后再校验正确的码表。
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//请求数据的中文乱码问题
//客户端网页我们控制为UTF-8
//以get方式提交数据时,request设置编码无效。即使设置了UTF-8还是会去查ISO8859-1
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
System.out.println(username);
byte source [] = username.getBytes("iso8859-1");
username = new String (source,"UTF-8");
System.out.println(username);
}
3:提交数据中文乱码问题总结:
1.如果提交方式是post的话,如果想避免乱码,只需要设置对象编码即可。
注意:编码需要根据客户端数据提交的方式进行设置。
2、如果提交方式是get,设置对象的编码无效,如果想避免乱码,只能手动转换。
//乱码字符串
String data = "???????";
data = new String (source,"UTF-8");
等同于
String data = "???????";
//得到客户机提交的原始数据
byte source [] = data.getBytes("iso8859-1");
//解决乱码
data = new String (data.getBytes("iso8859-1"),"UTF-8");
3.get方法乱码也可以通过更改服务器配置来解决。更改conf目录下的.xml文件。
3.1
<port="8080"="HTTP/1.1"="20000"="8443"="UTF-8" />
这种方法需要更改服务器,不灵活,不推荐。
3.2
<port="8080"="HTTP/1.1"="20000"="8443" I="true" />
设置此方法之后连接器将使用服务器设置的编码,虽然比之前的改变更加灵活,但是仍然使得我们的应用程序牢牢依赖于服务器,不建议这么做。
四:最后:
如果URL地址后面带中文数据,一定要进行URL编码,如果表单提交参数带中文数据,浏览器会自动帮我们编码,但是如果直接通过链接带入中文参数,浏览器是不会帮我们编码的,这时候上面说的第二种解决中文乱码问题的方法就不管用了,应该先通过 .(, "UTF-8") 进行编码。
扫一扫在手机端查看
-
Tags : 在form中用get方法传参乱码解决方法
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。