我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

表单提交数据(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") 进行编码。

二维码
扫一扫在手机端查看

本文链接:https://by928.com/6654.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线