java中form以post、get方式提交数据中文乱码问题总结

网友投稿 201 2023-08-06


java中form以post、get方式提交数据中文乱码问题总结

一:form在前台以post方式提交数据:

浏览器将数据(假设为“中国”)发送给服务器的时候,将数据变成0101的二进制数据(假设为98 99)时必然要查码表,浏览器以哪个码表打开网页,浏览器就以哪个码表提交数据。数据到达服务器后,数据(98 99)要封装到request中,在servlet中调用Request的getParameter方法返回的是字符串(“中国”),方法内部拿到数字后要转成字符,一定要查码表,由于request的设计者是外国人,所以默认查的是他们常用的ISO8859-1,这就是请求数据产生乱码的根源。

复制代码 代码如下:

package com.yyz.request;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

//以post方式提交表单

public class RequestDemo extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

         //请求数据的中文乱码问题

        request.setCharacterEncoding("UTF-8");//客户端网页我们控制为UTF-8

        String username = request.getParameter("username");

        //获取数据正常,输出数据时可以查阅不同码表

        response.setCharacterEncoding("gb2312");//通知服务器发送数据时查阅的码表

        response.setContentType("text/html;charset=gb2312");//通知浏览器以何种码表打开

        PrintWriter out = response.getWriter();

        out.write(username);

    public void doPost(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        doGet(request,response);

}

二:form在前台以get方式提交数据:

get方式提交的数据依然是浏览器用什么码表打开就用什么码表发送。不同的是,以get方式提交数据时,request设置编码无效。即使设置了UTF-8还是会去查ISO8859-1。得到(? ?),要解决这个问题,需要拿着(??)反向查ISO8859-1,拿到(98 99)后,再去查正确码表。

复制代码 代码如下:

package com.yyz.request;

 

 import java.io.IOException;

 import java.io.Prihttp://ntWriter;

 

 import javax.servlet.ServletException;

 import javax.servlet.http.HttpServlet;

 import javax.servlet.http.HttpServletRequest;

 import javax.servlet.http.HttpServletResponse;

//以get方式提交表单

public class RequestDemo extends HttpServlet {

   public void doGet(HttpServletRequest request, HttpServletResponse response)

           throws ServletException, IOException {

        //请求数据的中文乱码问题

       request.setCharacterEncoding("UTF-8");//以get方式提交数据时,request设置编码无效。即使设置了UTF-8还是会去查ISO8859-1

       String username = request.getParameter("username");

      System.out.println(username);

       byte source [] = userhttp://name.getBytes("iso8859-1");

       username = new String (source,"UTF-8");

       System.out.println(username);

      

   public void doPost(HttpServletRequest request, HttpServletResponse response)

           throws ServletException, IOException {

       doGet(request,responsetLYBptCF);

}

}

三:提交数据中文乱码问题总结:

1.如果提交方式为post,想不乱码,只需要设置request对象的编码即可。

注意:客户机数据是以哪种方式提交的,request就应该设成什么编码。

2.如果提交方式为get,设置request对象的编码是无效的,想不乱码,只能手工转换。

String data = "???????";//乱码字符串

     byte source [] = data.getBytes("iso8859-1");//得到客户机提交的原始数据

     data = new String (data.getBytes("iso8859-1"),"UTF-8");//解决乱码

//等同于

data = new String (source,"UTF-8");

3.get方式的乱码,还可以通过更改服务器配置的方式实现。更改Tomact的conf目录下的server.xml文件。

四:最后的最后,提一个小细节:URL地址后面如果跟了中文数据,一定要经过URL编码。表单提交的参数有中文数据,浏览器会自动帮我们编码,但如果是通过链接直接带中文参数,浏览器是不会帮我们编码的,这时想通过上述第二种方式解决中文乱码问题就时灵时不灵了,应该通过URLEncoding.encode(,"UTF-8")先编码。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:JavaEE通过response实现请求重定向
下一篇:Java之Thread的join方法实例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~