为什么用get会乱码,而用post不会乱码

周靖峰 2012-04-10 02:51:55
ex8-01.html

<?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

<?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的时候,输入中文按确定却出现乱码,这个太神奇了,求解释
...全文
680 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
rhydong 2012-09-19
  • 打赏
  • 举报
回复
长见识了!!!
hzc543806053 2012-04-10
  • 打赏
  • 举报
回复
解解乱码问题,请参考:http://blog.csdn.net/hzc543806053/article/details/7075490
或者可以用过滤器来
wanjunis 2012-04-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

request.setCharacterEncoding("UTF-8");这个是只对post方法有用,如果想对get方法有用就在tomcat配置文件server.xml中Connector元素下设置
URIEncoding="UTF-8"
[/Quote] 一楼正解.修改一下就OK了.
vcxzv 2012-04-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
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");……
[/Quote]
同意
Spring89 2012-04-10
  • 打赏
  • 举报
回复
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);
然后获取时,转一次码就可以了!
  • 打赏
  • 举报
回复
+1 url提交,tomcat会对中文空格等进行encode编码,你可以java.net.URLDecoder.decode解码试试[Quote=引用 4 楼 的回复:]

get提交通过url

例如:
http://bbs.csdn.net/xxx?username=你大爷

get方式传中文就乱码

post是数据包的形式不存在这个问题
[/Quote]
X497347200 2012-04-10
  • 打赏
  • 举报
回复
get提交通过url

例如:
http://bbs.csdn.net/xxx?username=你大爷

get方式传中文就乱码

post是数据包的形式不存在这个问题
javamyself 2012-04-10
  • 打赏
  • 举报
回复
post 是表单提交
get方法提交的话是将数据带在你的url上面传过去的。
hubing0316 2012-04-10
  • 打赏
  • 举报
回复
首先给你一个建议,首先你遇到这种情况请先google或者百度

然后回答你的问题,get的限制表单的数据集为ASCII码,而Post支持整个ISO10646字符集,默认是用ISO-8859-1,如果不显示的声明method为post,则默认为get,你想get传递的字符集是ASCII当你输入汉字的时候会不是乱码吗?
宏Lee 2012-04-10
  • 打赏
  • 举报
回复
request.setCharacterEncoding("UTF-8");这个是只对post方法有用,如果想对get方法有用就在tomcat配置文件server.xml中Connector元素下设置
URIEncoding="UTF-8"

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧