day19(乱码解决方案)

乱码的解决方案:

    首先需要理解乱码的产生原因:无非就是编码格式的问题

    1.服务器到浏览器  

       字节流传输时

        产生乱码的原因:

             1.浏览器打开方式不对(打开时 的方式为默认的方式,各个浏览器的方式都不同)

             2.中文转字节数组

          解决方案:

ServletOutputStream outputStream = response.getOutputStream();
response.setHeader("Content-Type", "text/html;charset=utf-8");//设置响应头部
outputStream.write("成功".getBytes());
outputStream.close();    

       字符流传输时

           产生乱码的原因:

             字符流传输时是存在缓存区的,response获得字符流,

             缓冲区中的默认编码格式为ISO-8859-1码,这个字符不支持中文;

           解决方案1

response.setHeader("Content-Type", "text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
response.getWriter().print("中文1");                

              解决方案2

response.setContentType("text/html;charset=utf-8");
response.getWriter().print("中文1");

2.浏览器到服务器乱码

      乱码产生分为两类doGet和doPost

        doGet乱码原因

              浏览器-------url-------服务器

                在请求时:数据在url中对数据进行了一次编码(ISO-8859-1);

                浏览器----(ISO-8859-1编码)----url-------服务器

                  在传递的过程中都是使用字节传输的。

          解决方案:

              在服务器解决乱码:获取传递参数是先使用ISO-8859-1解码称为字节

                       再使用UTF-8进行重新编码

                new String(request.getParameter(String name).getByte("ISO-8859-1"),"UTF-8");

        doPost乱码原因

              浏览器-----缓冲区(ISO-8859-1)-----服务器

                只需要修改缓冲区编码格式就可以了

                request.setCharacterEncoding("UTF-8");

    3.编码格式转换  

      url进行编码 

java.net.URLDecoder.decode(String s,String enc);
将application/x-www-form-urlencoded字符串转换成普通字符串。

java.net.URLEncoder.decode(String s,String enc);
将普通字符串转换成application/x-www-form-urlencoded字符串。

    

                           

                

                  

                

原文地址:https://www.cnblogs.com/fjkgrbk/p/charset.html