zoukankan      html  css  js  c++  java
  • 5 Http请求中文乱码处理

    java 乱码分很多种,这里主要研究解决http请求中出现乱码的情况。

    http请求出现中文乱码的主要原因:发送方与接收方编码不一致服务器默认支持的编码与web应用不一致,如:tomcat 是国外程序员开发的,页面默认编码为ISO-8859-1,而我们很多中文浏览器默认的编码为:UTF-8,如果不作处理,从浏览器发送中文数据发送给web应用就会出现乱码。

    http请求出现中文乱码的主要情况:

    1 页面带中文的标签都显示乱码

    2 表单提交(form):post与get

    3 超链接:<a href=”http://cnblogs.com?name=流氓”>

    4 SendRedirect() 发生乱码

    5 getRequestDispatcher("url").forward(request, response)

     

    1 页面带中文的标签都显示乱码

    Servlet 后台传递中文信息时,没有设置编码格式

    1      response.setContentType("text/html;");
    3         PrintWriter out = response.getWriter();
    4         out.println("<form action='/MessyCode/FormRecevie' method='post' >");
    5         out.println("用户名:<input type='text' name='username' > <br/>");
    6         out.println("<input type='submit' value='提交' > <br/>");
    7         out.println("</form>");

      在第1行设置一下reponse对象的编码格式可解决该问题,修改代码如下:

      response.setContentType("text/html;charset=utf-8");

      2 表单提交(form):post与get

      ① post 提交之后,接受页面出现乱码

      

      发送页面

    1         response.setContentType("text/html;charset=utf-8");3         PrintWriter out = response.getWriter();
    4         out.println("<form action='/MessyCode/FormRecevie' method='post' >");
    5         out.println("用户名:<input type='text' name='username' > <br/>");
    6         out.println("<input type='submit' value='提交' > <br/>");
    7         out.println("</form>");

      

      接收页面

    1         response.setContentType("text/html");
    2         PrintWriter out = response.getWriter();
    3         String username = request.getParameter("username");
    4         out.println(username);

     解决方案:在获取传递的参数前,要设置request与response 对象的编码格式

    response.setContentType("text/html;charset=utf-8");

    request.setCharacterEncoding("utf-8");

     

    ② get 提交之后出现乱码

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

    String username = new String((request.getParameter("username")).getBytes("iso8859-1"),"utf-8");

     

    3 超链接

    ① 接收页面给request 与 response 对象设置编码

    1      response.setContentType("text/html;utf-8");
    2         request.setCharacterEncoding("utf-8");
    3         PrintWriter out = response.getWriter();
    4         
    5         String name = request.getParameter("name");
    6         System.out.println(name);
    7         out.println(name+"</br>");

    ② 发送页面有两种情况,一种是html 与jsp 页面超链接,一种是Servlet的超链接

    html 与jsp 页面超链接必须在页面设置编码格式为:UTF-8,否则接收页面不管怎么处理都会出现乱码

    jsp 页面设置:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

    html 页面设置:

    <meta http-equiv="content-type" content="text/html;charset=utf-8">

    Servlet超链接在发送页面设置response对象编码:

    response.setContentType("text/html;charset=utf-8");

     

    4 SendRedirect()方法

    发送页面对发送的中文进行编码

    1      //包含中文信息的参数进行编码
    2         String username = URLEncoder.encode("流氓3","UTF-8");
    3         response.sendRedirect("/MessyCode/RedirectReceive?username="+username);

    接收页面需要设置reponse的编码格式,然后直接调用即可

    response.setContentType("text/html;charset=utf-8");

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

       

      5 getRequestDispatcher("url?parameter="+"参数").forward(request, response)

      发送页面需要对response 与request 对象都进行编码设置

    1         response.setContentType("text/html;charset=utf-8");
    2         request.setCharacterEncoding("utf-8");
    3         PrintWriter out = response.getWriter();
    4         //包含中文信息的参数进行编码
    5         String username = "流氓3";
    6         request.getRequestDispatcher("/DispatcherReceive?username="+username).forward(request, response);

      接收页面直接访问即可,无需处理

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

  • 相关阅读:
    程序集“xxx"中的类型"xxx"的方法“XXXX”没有实现
    关于C# json转object时报错:XXXXXXXXXX需要标记“"”,但找到“XX”。
    System.Reflection.Assembly.GetEntryAssembly()获取的为当前已加载的程序集
    MongoDB 模糊查询,及性能测试
    SignalR介绍与Asp.net,前台即时通信【转】
    mongodb常用命令【转】
    MongoDB update数据语法【转】
    Mongodb在Windows下安装及配置 【转】
    C#(asp.net)备份还原mssql数据库代码【转】
    小记,取GB2312汉字的首字母【转】
  • 原文地址:https://www.cnblogs.com/Latiny/p/8400118.html
Copyright © 2011-2022 走看看