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

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

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

HTML代码:

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

Servlet代码,截取一部分:

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

         PrintWriter out=response.getWriter();

         String title="设置Cookie实例";
String docType="<! DOCTYPE html>\n";
out.println(docType+
"<html>\n"+
"<head><title>"+title+"</title></head>"+
"<body bgcolor=\"#f0f0f0\">\n"+
"<h1 align=\"center\">"+title+"</h1>\n"+
"<ul>\n" +
" <li><b>站点名:</b>"
+ request.getParameter("name") + "\n</li>" +
" <li><b>站点 URL:</b>"
+ request.getParameter("url") + "\n</li>" +
"</ul>\n" +
"</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的原理跟过滤器一样;

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

 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。

最新文章

  1. 2015游戏蛮牛——蛮牛杯第四届开发者大赛 创见VR未来开启报名
  2. Object类.
  3. HDU--洗衣服
  4. Elasticsearch-HttpServerModule
  5. JDBC ODBC区别
  6. Android 常用布局视图
  7. vs2012 发布网站,
  8. 在多浏览器使用JS复制内容到剪切板,无需插件
  9. WCF中的标准绑定
  10. json学习系列(4)-JSONString对象的optXXX方法的使用
  11. SrcollView分页加载数据(第二种方法 自定义listView)
  12. Home键状态保存运用场景
  13. jQuery Mobile的学习 jQuery Mobile工具栏、标题栏、页脚栏的定位学习
  14. Oracle删除表、字段之前判断表、字段是否存在
  15. JS跨域笔记
  16. python运算符使用规律
  17. NSInteger和BOOL的底层类型
  18. unable to fund vcvarsall.bat
  19. TCP报文段的首部格式
  20. 【原创】大叔经验分享(26)hive通过外部表读写elasticsearch数据

热门文章

  1. 搭建elsticsearch集群 报错with the same id but is a different node instance解决办法
  2. kali渗透综合靶机(一)--Lazysysadmin靶机
  3. Easy way to change collation of all database objects in SQL Server
  4. 高速排序java语言实现
  5. 国内外DNS服务器地址列表大全
  6. 远程链接mysql数据库
  7. git个人使用总结(命令版)
  8. .net 定时服务
  9. java 乱码问题解决思路
  10. js获取url传递参数值