还是请教一个url编码问题

strayly 2008-11-14 09:27:27
我用的是tomcat server.xml设置了URIEncoding="UTF-8"
页面中如果 从文本框中输入中文 然后提交 是正常的
如果用这种UTF-8编码url形式也是正常的,
http://localhost:8080/search.jsp?keyword=%E7%BC%96%E8%BE%91
但是如果在url中直接用汉字就不行了会出现乱码

请问,如何做到 在url中用汉字 和 UTF-8的url编码 都能正常显示?
...全文
148 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
strayly 2008-11-14
  • 打赏
  • 举报
回复
期待有高手来解答
rwjwjjn 2008-11-14
  • 打赏
  • 举报
回复
我也遇到过楼主的问题,是页面编码用gbk做的;
但是当我把所有编码的地方都设置成utf-8后;
在request.setCharacterEncoding("utf-8");
就可以用中文传递了。

建议用全部用utf-8,会少不少发麻
ziwei_1986 2008-11-14
  • 打赏
  • 举报
回复
为什么不用filter呢?
strayly 2008-11-14
  • 打赏
  • 举报
回复
楼上没太明白我的意思,我就是按上面设置的
现在url编码形式是正常的
http://localhost:8080/search.jsp?keyword=%E7%BC%96%E8%BE%91
但是如果直接在url中写中文就不行了
http://localhost:8080/search.jsp?keyword=编辑

我的意思是如何能让这两种形式都能正常
kingsam_8405 2008-11-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 shuai45 的回复:]
1在tomcat中设置 URIEncoding=“UTF-8”
2在jsp中

<%@ page pageEncoding=”UTF-8″%>
<%@ page contentType=”text/html;charset=UTF-8″%>
<%request.setCharacterEncoding(”UTF-8″);%>

如果还没有效果
那就java.net.URLEncoder.encode 进行转定义
[/Quote]

同意这种做法,我以前也遇到过,不过只修改了下tomcat中的设置就可以了
大河V5 2008-11-14
  • 打赏
  • 举报
回复
String keyword= req.getParameter("keyword");
// Collapsed characters support (GBK->UTF-8)
keyword = new String (name.getBytes("GBK"),"UTF-8");
shuai45 2008-11-14
  • 打赏
  • 举报
回复
1在tomcat中设置 URIEncoding=“UTF-8”
2在jsp中

<%@ page pageEncoding=”UTF-8″%>
<%@ page contentType=”text/html;charset=UTF-8″%>
<%request.setCharacterEncoding(”UTF-8″);%>

如果还没有效果
那就java.net.URLEncoder.encode 进行转定义

strayly 2008-11-14
  • 打赏
  • 举报
回复
就是 通过下面两种形式都能得到正确结果
http://localhost:8080/search.jsp?keyword=%E7%BC%96%E8%BE%91
http://localhost:8080/search.jsp?keyword=编辑
该如何做?
fengyangchao2 2008-11-14
  • 打赏
  • 举报
回复
在.net中用UrlEncode)(url)和UrlDecode(url)可以对带中文的页面进行自动编码和反编码
在Java中应该也有相应的方法
叶子哟 2008-11-14
  • 打赏
  • 举报
回复
转一下就行了
先设置request的编码是国标,再
return (new String(strutf8.getBytes("ISO-8859-1"), "GBK")); //去掉前后的空格;
strayly 2008-11-14
  • 打赏
  • 举报
回复
楼上说的很对,我所面临的就是这个问题,不知道有没有简便的办法解决
叶子哟 2008-11-14
  • 打赏
  • 举报
回复
呵呵,地址栏传送时实际是用gbk的url编码了的,在IE里都做了一层处理,你服务器按这个解码肯定没问题,如果你服务在按utf-8来解码,肯定就要出错了!
你可以比较用firefox和ie传送url参数,其实你服务器收到的都是用gbk编码的urlencode数据

strayly 2008-11-14
  • 打赏
  • 举报
回复
我记得在php里处理这个问题非常简单
在php里 UFT-8格式下 可以直接用函数 urldecode("%E7%BC%96%E8%BE%91") 和 urldecode("编辑")
他们两个输入的结果都是"编辑";
为什么java处理起来 这么麻烦?
oracle_lover 2008-11-14
  • 打赏
  • 举报
回复
加入 useBodyEncodingForURI="true"
strayly 2008-11-14
  • 打赏
  • 举报
回复
我比较困惑的是 request.setCharacterEncoding("GBK"); 可以处理地址栏的中文
request.setCharacterEncoding("UTF-8");确不能处理地址栏的中文
我如果页面用utf-8编码,该怎么处理地址栏的中文?
strayly 2008-11-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 oracle_lover 的回复:]
tomcat做web服务器时,通过地址栏传中文参数时,为防止浏览器上的为乱码需在服务器server.xml中配置对应的端口中配置编码方式即可.例如:

<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="…
[/Quote]
我试过了 通过文本框提交 可以, 但是通过地址栏直接输入中文 不行
我在jsp里 设置 request.setCharacterEncoding("GBK"); 地址栏输入中文,可以正常显示,但通过文本框 输入 就是乱码了,
因为我的页面是UTF-8 编码
但是 设置 request.setCharacterEncoding("UTF-8");确不能正确解析地址栏的中文
tujiyue 2008-11-14
  • 打赏
  • 举报
回复
用filter过滤也可以的,其实URL中中文变乱码对你有利
liliang1222 2008-11-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 oracle_lover 的回复:]
tomcat做web服务器时,通过地址栏传中文参数时,为防止浏览器上的为乱码需在服务器server.xml中配置对应的端口中配置编码方式即可.例如:

<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true"  useBodyEncodingForURI="true" URIEncoding="UTF-8"/>

中加…
[/Quote]
URIEncoding="UTF-8"
oracle_lover 2008-11-14
  • 打赏
  • 举报
回复
tomcat做web服务器时,通过地址栏传中文参数时,为防止浏览器上的为乱码需在服务器server.xml中配置对应的端口中配置编码方式即可.例如:

<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" useBodyEncodingForURI="true" URIEncoding="UTF-8"/>

中加入useBodyEncodingForURI="true" URIEncoding="UTF-8"就可以了.
最近一直在研究爬虫和Lucene,虽然开始决定选用Heritrix来执行爬虫操作,但是后来发现用它来做还是存在一定的问题,比如需要程序生成相应的XML文件,对于同一个Job,怎样才能保证重复运行该Job时文件夹始终是同一个(Heritrix为Job创建文件夹的规则是“Job名称-时间戳”)等等,都是需要考虑的问题,最终还是将其搁浅。    后来google了一下,找到了一个简单爬虫的程序代码(http://www.blogjava.net/Jack2007/archive/2008/03/24/188138.html),随即试验了一下,发现确实能得到网页的内容,在这里还是要谢谢代码的提供者——Jack.Wang。    虽然试验成功,但是在随后的大数据量试验时,还是出现了问题。最初试验时,我只是让程序去抓取10个URL链接,当我将URL链接数改为100个时,问题出现了——URL中存在重复,而且非常容易的就变成死循环。举个例子来说,比如我首先爬的是A.html,在A.html中有两个链接:B.html,C.html,等爬完A.html以后,程序会爬B.html,这时如果B.html中的所有链接中有A.html这个页面的链接,那么程序又会去爬A.html这个页面,如此一来就形成了一个死循环,永远也不能停止。    跟踪程序发现,原来是在添加要抓取的网页的链接列表中,没有将已经抓取过的URL去除,所以才造成了死循环。现在虽然加上了这个判断,但是从我运行程序的效果来看,也不是很理想,总是感觉有些慢,800个页面要一两分钟才能爬完,这个我觉得有点说不过去。    这个产品,做到现在,我遇到了这么几个情况,有和大家分享的,也有向大家请教,求助的。    1.关于对应关系数据的保存方式    在创建索引的时候,需要将网页的URL和网页的内容传到相应的方法中,当然URL和内容是要对应的,也许是经验太少吧,我采取的是通过构建一个JavaBean的方式来传递的,不知道大家有没有更好的方法       2.关于要创建索引的内容的保存方式    最初的想法是不创建文件,直接将内容保存到变量中,然后创建索引,即先抓取网页的内容,然后将网页的内容和URL保存到自己构建的JavaBean对象中,接着将这个对象放到一个list列表中,等所有网页抓取完毕以后,将这个列表传到创建索引的方法中。这种做法看似不错,可是当URL数量很大时,会导致内存不够用,所以还是创建文件比较稳妥。    3.关于网页编码问题    遇到这个问题也是一个巧合,本来我抓取的是客户的一个网站,后来同事说如果客户看访问日志,这个月的数据会和平常的数据不一样,所以我就抓取公司的网站,结果,问题出现了。原先公司的网站是用GB2312编码做的页面,现在采用的是UTF-8的编码,虽然我已经判断了页面的编码,可是依然不能解决保存的文件中文乱码的问题,不知道大家有什么好办法没有。错误信息为:java.io.UnsupportedEncodingException    附件为爬虫代码 本文出自 “徘徊在c#,java,php之间” 博客,请务必保留此出处http://jerrysun.blog.51cto.com/745955/221879

81,122

社区成员

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

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