还是URL中文编码问题

littleholly 2008-03-18 12:21:56
Web服务器: Tomcat5.5
JDK:1.5.0_06

IE:选中“总是以UTF-8发送编码"
页面编码也为UTF-8
提交方式为PUT(GET、POST都试过,一样的结果)

我现在有个页面,有5个表单:email/password1/password2/昵称/验证码.
当用户在昵称中填写中文时,提交的URL如下:(如中文为“昵称”二字)

GET /projecteye/user/register.pe?email=xxx@gmail.com&password1=&password2=&nickname=%E6%98%B5%E7%A7%B0®isterCode= HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, application/x-silverlight, */*
Referer: http://localhost:8080/projecteye/user/register.jsp
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: localhost:8080
Connection: Keep-Alive
Cookie: JSESSIONID=61B6ED1EA7D0678182E0C2D59E48CB0C

问题在于:当我在服务器端解码的时候,无论用何种编码解码都不能得到正确的中文:
Filter里面的代码:
String tmp=request.getParameter("nickname");
String tmpc=request.getCharacterEncoding();
String tmpb=new String(tmp.getBytes());
String tmp2=new String(tmp.getBytes("iso8859-1"));
String tmp3=new String(tmp.getBytes("utf-8"));
String tmp4=new String(tmp.getBytes("gb2312"));
String tmp5=new String(tmp.getBytes("GBK"));
String tmp6=URLDecoder.decode(tmp);
String tmp7=URLEncoder.encode(tmp);

调试的输出结果:
tmp "昵称"
tmpc null
tmpb "????§°"
tmp2 "鏄电О"
tmp3 "忙聵碌莽搂掳"
tmp4 "????§°"
tmp5 "????§°"
tmp6 "昵称"
tmp7 "%3F%3F%3F%3F%A1%EC%A1%E3"

下面是register.jsp

<%@ page pageEncoding="utf-8"%>
<%
request.setCharacterEncoding("utf-8");
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<form method="put" action="register.pe">
邮件:<input type="text"name="email" value="xxx@gmail.com" /><br />
密码:<input type="password" name="password1" /><br />
再次输入密码:<input type="password" name="password2" /><br />
昵称<input type="text" name="nickname" /><br />
验证码:<image src="registercode" /><input type="text" name="registerCode"><br />
<input type="submit" value="注册"></form>
</body>
</html>

另外在网上搜索了下:
tomcat中server.xml配置文件也加上了参数
<connector .... useBodyEncodingForURI= "true" URIEncoding= "UTF-8" />

试了很多方法,都不行....请指教

一个很奇怪的问题:
我中文为"昵称",编码后要嘛是4个字符,要嘛是2个,怎么会是URL里面的3个呢?%E6%98%B5%E7%A7%B0
...全文
2602 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
djiangjun 2008-09-08
  • 打赏
  • 举报
回复
也遇到这问题了,URL里有中文,导致下个页面无法正常显示……
fy_kenny 2008-03-19
  • 打赏
  • 举报
回复
tomcat 服务器 没有重新启动
bobor_2008 2008-03-18
  • 打赏
  • 举报
回复
利用URL重写传递中字汉字的时候就容易出现乱码问题.

所以用POST既安全性好,也可能解决这个问题.
littleholly 2008-03-18
  • 打赏
  • 举报
回复
按照1、3楼的提示我把页面头设置成这样
<%@page contentType="text/html;charset=UTF-8" pageEncoding="utf-8" language="java" %>
<%
request.setCharacterEncoding("utf-8");
%>

然后改用post方法...这样就成功没问题

但是.....
我又回复成原来的样子,重启Tomcat,重开IE访问页面,居然也成功了(无限头晕中)

guestdaocao 2008-03-18
  • 打赏
  • 举报
回复
鸡毛男,,,-_-,,来,哥哥给你整。。。
zuoguodang 2008-03-18
  • 打赏
  • 举报
回复
提交表单最好用post啊,还有在用URL重写时也会出现乱码现象,比如你传一个中文参数,在获取这个参数的时候就会抛出一个空指针异常。
老紫竹 2008-03-18
  • 打赏
  • 举报
回复
呵呵!如楼上所说,
1 表单提交你最好用POST
2 UTF-8 编码,一个汉字是3个字节。 这点你可以到google搜索汉字就知道了
3 每个文件的最前面,改成如下的样子
<%@page contentType="text/html;charset=UTF-8" pageEncoding="utf-8"%>
<%
request.setCharacterEncoding("utf-8");
%>

4 如果页面手工录入的中文出现乱码,则需要修改文件自身的编码类型
bootupnow 2008-03-18
  • 打赏
  • 举报
回复
今天超时了,额的神呀,眠了。。。
bootupnow 2008-03-18
  • 打赏
  • 举报
回复
楼主的register.jsp

<%@ page contentType="text/html; charset=GBK" language="java" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<form method="post" action="showNick.jsp">
邮件: <input type="text"name="email" value="xxx@gmail.com" /> <br />
密码: <input type="password" name="password1" /> <br />
再次输入密码: <input type="password" name="password2" /> <br />
昵称 <input type="text" name="nickname" /> <br />
验证码: <image src="registercode" /> <input type="text" name="registerCode"> <br />
<input type="submit" value="注册"> </form>
</body>
</html>


楼主的showNick.jsp

<%@ page contentType="text/html; charset=GBK" language="java" %>
<html>
<head>
<title>t</title>
</head>
<body>
<% request.setCharacterEncoding("GBK"); %>
<%= request.getParameter("nickname")%>
</body>
</html>

试试吧。

表单就用post,另外同一用上<%@ page contentType="text/html; charset=GBK" language="java" %>
楼主一会儿用<%@ page pageEncoding="utf-8"%>
一会儿又用<%request.setCharacterEncoding("utf-8");%>
把自己都整晕了,呵呵。

用老白的话说:整那些花花玩儿干嘛?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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