• springMvc27-get乱码解决


     

    jsp页面中    通知浏览器以utf-8解码

    get请求编码方式和post请求提交编码方式不同,get是把数据直接放到url中,例如以上的uname,IE浏览器先对中文进行utf-8编码(一个中文3个字符表示 太长),继而为了缩短字符又用ISO8859-1编码后传递给服务器。服务器的doGet方法中要先进行ISO8859-1解码再utf-8解码才能看到中文。

    而post请求则在浏览器端把数据以utf-8的形式存储到http的请求体中,不用通过url传输,继而只要    request.setCharacterEncoding("utf-8");通知request以utf-8形式解码就行,因为request默认以ISO8859-1进行解码的。

    使用代码解决乱码问题

         1     public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
         2         // 处理响应数据的格式和编码,通知浏览器数据的显示方式
         3         response.setCharacterEncoding("utf-8");
         4         response.setContentType("text/html;charset=utf-8");
         5         // 获取字符输出流对象
         6         PrintWriter out = response.getWriter();
         7         // 获取请求参数
         8         String name = request.getParameter("uname");
         9         String address = request.getParameter("address");
        10         // 获取ISO8859-1的原始数据
        11         byte [] bs = name.getBytes("ISO8859-1"); //内部编码字节流,其实中文字符经过utf-8编码后的字节 都是英文可以表示的,只是       //ISO8859-1显示数据以一个字节一个字节显示,而utf-8以几个字节一起表示
        12         name = new String(bs,"UTF-8");
        13         bs = address.getBytes("ISO8859-1");
        14         address = new String(bs,"UTF-8");
        15         // 输出数据
        16         out.println("name="+name);
        17         out.println("
    ");
        18         out.println("address="+address);
        19     }

    如果使用以上的代码解决GET乱码每一个请求参数都需要重新的解码太繁琐,因此可以直接使用服务器通知浏览器以指定的方式进行编码字符数据。

    使用URIEnoding方式解决GET乱码问题

        1     2                connectionTimeout="20000"
        3                redirectPort="8443"
        4                URIEncoding="utf-8"/>

    URIEncoding主要指定的是%E5%8D%A1%E5%8D%A1的数据的解码方式,如果没有指定那么默认是ISO8859-1,如果指定那么采用指定的码表进行解码。因此服务器端就没有必要使用两个中编码方式进行转码了。

    注意:在实际的生产环境中我们代码的乱码问题不可能以来服务器帮助我们解决,因此推荐使用第一个转码方式。后期可以直接实现一个乱码的过滤器实现处理乱码的问题。
     

  • 相关阅读:
    命令执行(rce)
    [数据结构]栈和队列
    JUC并发编程系列详解篇五(线程基础理论进阶)
    上班干,下班学!这份 Java 面试八股文涵盖 20 多个技术点,还有优质面经分享,别再说卷不过别人了~
    面试20个人居然没有一个写出数组扁平化?如何手写flat函数
    开源 | 携程 Redis On Rocks 实践,节省 2/3 Redis成本
    判断一个字符串是否为另外一个字符串旋转之后的字符串
    SpringBoot使用@PropertySource读取 properties 配置
    共轭梯度法(CG)详解
    读博后才知道的真道理
  • 原文地址:https://blog.csdn.net/qq_41632427/article/details/126370283