java中form以post、get方式提交数据中文乱码问题总结
一:form在前台以post方式提交数据:
浏览器将数据(假设为“中国”)发送给服务器的时候,将数据变成0101的二进制数据(假设为9899)时必然要查码表,浏览器以哪个码表打开网页,浏览器就以哪个码表提交数据。数据到达服务器后,数据(9899)要封装到request中,在servlet中调用Request的getParameter方法返回的是字符串(“中国”),方法内部拿到数字后要转成字符,一定要查码表,由于request的设计者是外国人,所以默认查的是他们常用的ISO8859-1,这就是请求数据产生乱码的根源。
packagecom.yyz.request;
importjava.io.IOException; importjava.io.PrintWriter;
importjavax.servlet.ServletException; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; //以post方式提交表单 publicclassRequestDemoextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ //请求数据的中文乱码问题 request.setCharacterEncoding("UTF-8");//客户端网页我们控制为UTF-8 Stringusername=request.getParameter("username"); //获取数据正常,输出数据时可以查阅不同码表 response.setCharacterEncoding("gb2312");//通知服务器发送数据时查阅的码表 response.setContentType("text/html;charset=gb2312");//通知浏览器以何种码表打开 PrintWriterout=response.getWriter(); out.write(username); }
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ doGet(request,response); }