HTML使用post方式提交中文内容出现乱码的错误解决方式
今天在做一个例子的时候,使用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。
最新文章
- 2015游戏蛮牛——蛮牛杯第四届开发者大赛 创见VR未来开启报名
- Object类.
- HDU--洗衣服
- Elasticsearch-HttpServerModule
- JDBC ODBC区别
- Android 常用布局视图
- vs2012 发布网站,
- 在多浏览器使用JS复制内容到剪切板,无需插件
- WCF中的标准绑定
- json学习系列(4)-JSONString对象的optXXX方法的使用
- SrcollView分页加载数据(第二种方法 自定义listView)
- Home键状态保存运用场景
- jQuery Mobile的学习 jQuery Mobile工具栏、标题栏、页脚栏的定位学习
- Oracle删除表、字段之前判断表、字段是否存在
- JS跨域笔记
- python运算符使用规律
- NSInteger和BOOL的底层类型
- unable to fund vcvarsall.bat
- TCP报文段的首部格式
- 【原创】大叔经验分享(26)hive通过外部表读写elasticsearch数据