为什么用get会乱码,而用post不会乱码
ex8-01.html
- HTML code
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>获取客户提交的信息案例</title> </head> <body> <div class="zjfclass" align="center"> <form action="ex8-02.jsp" method="post"> <table> <tr> <td> 姓名: </td> <td> <input name="name" /> </td> </tr> <tr> <td> 电话: </td> <td> <input name="phone" /> </td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" value="提交" name="submit" /> </td> </tr> </table> </form> </div> </body></html>
ex8-02.jsp
- HTML code
<?xml version="1.0" encoding="UTF-8" ?><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>request对象常用方法应用案例</title> </head> <body> <% request.setCharacterEncoding("UTF-8"); out.println("姓名文本框提交信息:" + request.getParameter("name") + "<br />"); out.println("电话文本框提交信息:" + request.getParameter("phone") + "<br />"); out.println("客户端协议名和版本号:" + request.getProtocol() + "<br />"); out.println("客户机名:" + request.getRemoteHost() + "<br />"); out.println("客户机的IP地址:" + request.getRemoteAddr() + "<br />"); out.println("客户提交信息的长度:" + request.getContentLength() + "<br />"); out.println("客户提交信息的方式:" + request.getMethod() + "<br />"); out.println("HTTP头文件中的Host值:" + request.getHeader("Host") + "<br />"); out.println("服务器名:" + request.getServerName() + "<br />"); out.println("服务器端口号:" + request.getServerPort() + "<br />"); out.println("客户请求页面的文件目录:" + request.getServletPath() + "<br />"); %> </body></html>
上面这两个文件太奇怪了,当我在ex8-01.html中用post的时候,输入中文按确定完全正常,当我用get的时候,输入中文按确定却出现乱码,这个太神奇了,求解释
------解决方案--------------------
request.setCharacterEncoding("UTF-8");这个是只对post方法有用,如果想对get方法有用就在tomcat配置文件server.xml中Connector元素下设置
URIEncoding="UTF-8"
[解决办法]
首先给你一个建议,首先你遇到这种情况请先google或者百度
然后回答你的问题,get的限制表单的数据集为ASCII码,而Post支持整个ISO10646字符集,默认是用ISO-8859-1,如果不显示的声明method为post,则默认为get,你想get传递的字符集是ASCII当你输入汉字的时候会不是乱码吗?
[解决办法]
post 是表单提交
get方法提交的话是将数据带在你的url上面传过去的。
[解决办法]
get提交通过url
例如:
http://bbs.csdn.net/xxx?username=你大爷
get方式传中文就乱码
post是数据包的形式不存在这个问题
[解决办法]
js中用get提交中文时,你必须用url=encodeURI(url)对这个地址编码!然后获取时:
String app_name = java.net.URLDecoder.decode(request.getParameter("name"), "utf-8");
app_name = new String(app_name.getBytes("ISO-8859-1"),"utf-8");
只有经过这样两次的转码,才会输出中文!
或者在js中两次encodeURI,
url=encodeURI(url);
url=encodeURI(url);
然后获取时,转一次码就可以了!
[解决办法]
解解乱码问题,请参考:http://blog.csdn.net/hzc543806053/article/details/7075490
或者可以用过滤器来