zoukankan      html  css  js  c++  java
  • HTML使用post方式提交中文内容出现乱码的错误解决方式

    今天在做一个例子的时候,使用post方式提交表单,如果有中文的话,在另一个页面显示出来的时候,总是会出现乱码;

    但是将提交方式改为get的时候,就不会出现这种错误。

    详细错误见下面图片和代码。

    HTML代码:

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     5 <title>测试Cookie的设置和获取</title>
     6 </head>
     7 <body>
     8     <form action="/TestTomcat/SetCookie" method="post">
     9         站点名:<input type="text" name="name"><br>
    10         站点URL:<input type="text" name="url"><br>
    11         <input type="submit" value="提交" />
    12     </form>
    13 </body>
    14 </html>

    Servlet代码,截取一部分:

     1 response.setContentType("text/html;charset=utf-8");
     2         
     3         PrintWriter out=response.getWriter();
     4         
     5         String title="设置Cookie实例";
     6         String docType="<! DOCTYPE html>
    ";
     7         out.println(docType+
     8                 "<html>
    "+
     9                 "<head><title>"+title+"</title></head>"+
    10                 "<body bgcolor="#f0f0f0">
    "+
    11                 "<h1 align="center">"+title+"</h1>
    "+
    12                 "<ul>
    " +
    13                 "  <li><b>站点名:</b>"
    14                 + request.getParameter("name")  + "
    </li>" +
    15                 "  <li><b>站点 URL:</b>"
    16                 + request.getParameter("url") + "
    </li>" +
    17                 "</ul>
    " +
    18                 "</body></html>");

    出现的错误:

    一开始我以为时代码块放置的位置不对,将上面代码放在了doPost里面试了一下,还是出现这种错误。

    那么如何用post方式传递中文呢?

    通过查找资料,

    post方式提交 
    对于这种情况,response.setCharacterEncoding有影响,当没有对response.setCharacterEncoding设置的时候值为null,则默认采用iso-8859-1来进行重新编码(解码)。 
    浏览器根据自己页面的编码格式作为起始编码格式,把字符进行编码成byte进行传输,到了tomcat,tomcat不进行干涉其中的重新编码(解码)格式。如果response.getCharacterEncoding为null,那么默认采用iso-8859-1进行重新编码(解码)成字符,如果设置了,就按照设置的编码格式进行重新编码(解码)字符。

    POST传过去的都是单字节数据.所以POST传来的数据编码都是ISO-8859-1的单字节数据.因此英文和数字不会有乱码...在这种情况下.过滤器和server.xml里的设置都是无效的.当然request.setCharacterEncoding()也是无效的因为setCharacterEncoding的原理跟过滤器一样;

    对于上面问题正确的处理方式应该为:

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

    将post传递过来的ISO编码内容,改成UTF-8格式的内容,然后再输出。

    参考http://blog.csdn.net/sxyandapp/article/details/44623039。

  • 相关阅读:
    iOS 之 创建分类
    iOS 之 动画
    iOS 倒出spa文件 打包
    js闭包
    wampserver配置多站点
    js重定向
    php obstart
    php保存远程图片
    php获取前天的昨天的日期
    weixin js接口
  • 原文地址:https://www.cnblogs.com/xingzhui/p/7413184.html
Copyright © 2011-2022 走看看