URL中有中文,server就找了这个URL了??

02-10-26 kid
我找了很久,也没有解决办法,请问哪位大哥能帮帮忙,

说说你们的解决办法,或者给点提示,先谢啦!

banq
2002-10-27 17:41
问题不明白

fuck
2002-10-27 21:24
找了应该是"找不到了"?

URL不支持双字节码的分解.

要定位一个资源,有多程naming服务同时合作完成的.

http://host:port/dir/filename由PNS,DNS,FS等naming服务分别分解它的协议,主机,端口,文件系统,然后去定位,URL请求方发送的URL要符合URL规范,然后接收方会转译成相应的编码的.不要以为参数可以是中文的,URL本身也可以是中文的.

http://host/我的图片.jpg这样的URL,文件命名系统是不能定位的.必须转为规范的URL方式,即javascript中的escape或java中的java.net.URLEncpder.encode();方法编码一下.

kid
2002-10-27 21:28
我用javazoom的download4j实现文件下载。

访问:

http://127.0.0.1:8080/download/报表.xls

就出现http404找不到地址的错误。

但访问另一个文件:

http://127.0.0.1:8080/download/test.xls

时就可以正常下载。

很多人都遇到了类似的问题,例如访问一个中文名称的页面。

用resin2.1.4和tomcat4.0.5都试过,但解决不了。

问题是怎样才能使这些server能识别含有中文的URL??

谢谢指点!!

fuck
2002-10-27 21:36
我已经说了啊,

在程序中用java.net.URLEncoder.encode();

比如Striing url = "http://host/中文.jpg";

url = java.net.URLEncoder.encode(url);

out.println(url);

如果是HTML页面,这样写:

<a href="javascript:location.href=\"escape('http://host/中文.jpg')\"">中文</a>

这样URL看起来就会象http://host/%A%D%E%C.jpg这样就能访问了.

kid
2002-10-28 23:57
fuck兄!还是不行呀!还有一个encode(String,String)方法,

试过gbk和ulf-8,ulf-16编码都不行,可以说说从请求到应答的

整个流程的原理吗?

fuck
2002-10-29 09:08
谁让你加字符集了啊?

你现在这样,在你的WEB目录下放一张图片,叫中文.jgp,然后把

"中文.jpg"编码,JAVA中用java.net.URLEncoder.encdoe("中文.jpg");

出来的都是%D6%D0%CE%C4.jpg"

你再访问http://host/%D6%D0%CE%C4.jpg看看在不在啊?说得这么明白了

咋就不听呢?

kid
2002-10-29 10:02
直接放个静态文件是可以访问。但是我访问的的url是从web.xml中影射给servelt去处理的,问题可能出现在这里。fuck兄有何高见?

andrawu
2002-10-29 14:01
中文url是比较麻烦的。楼上说的方法是可以的。

但是有些webserver不支持。

就拿tomcat来说,在4.0以上用java.net.URLEncoder.encdoe是可以的,在以下如:3.0就不行了。

用javascript中的escape好象都可以。

有些webserver可以支持中文url。如jrun4.0就支持,不需要任何转换。

在weblogic和WebSphere就还没有试过。

kid
2002-10-29 15:27
我试过tomcat4.0.5和resin2.1.4都不行,直接访问网页就可以,但经过web.xml路径影射给servlet处理就不行了

chinabill
2002-12-03 18:17
<%= java.net.URLEncoder.encode("中文")%>>

use this to open is ok

<%

String name=request.getParameter("Name");

String ok=java.net.URLDecoder.decode(name)

%>

chinabill
2002-12-03 18:17
<%
String name=request.getParameter("Name");
String ok=java.net.URLDecoder.decode(name)
%>

猜你喜欢