使用Java处理URL中的特殊字符

时间:2009-09-20 13:02:58

标签: java url gwt

我编写了一个Java程序来生成基于从k3b翻录的CD的m3u文件,该文件几乎保留了艺术家,专辑和曲目名称中的特殊字符编码。然后我将这些m3u文件放在服务器上并生成一个GWT Web应用程序,其中m3u文件名是HTML锚标记的目标。对于99%以上的案例,这一切都很完美。在少数情况下,特殊字符会导致链接失败。

一个失败的例子是Movits!专辑Äppelknyckarjazz(注意由URI构造函数编码的第一个字符为%C3%84)。由于客户端是GWT,视图源不显示链接,:-(但是当悬停在链接上时,Firefox显示正确解码的URL。当点击链接时,Firefox失败:“...Ôppelknyckarjazz.m3u是在这台服务器上找不到“就好像不同的角色编码方案在起作用,但坦率地说,我的大脑在试图解开这个级别的难题时会受到伤害。

所以真的有两个问题:

1)我的问题是编码方案问题吗?

2)假设是,我如何在应用程序的各个部分(Java m3u生成器,GWT客户端,Firefox浏览器,Apache Web服务器)之间保持一致性。

3 个答案:

答案 0 :(得分:3)

String result = java.net.URLEncoder.encode("Äppelknyckarjazz", "UTF-8");

我认为这是一个适合你的解决方案。

答案 1 :(得分:0)

Ä可编码为%C3%84(UTF8)或%C4(Latin1)。听起来你正在使用Latin11和UTF8的混合物。您需要确保在所有系统中使用相同的编码。

在极少数情况下,您无法控制编码,请参阅我对此问题的回答,

How to determine if a String contains invalid encoded characters

答案 2 :(得分:0)

首先,您必须在HTML页面上声明一个字符集。最好的是UTF-8。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

然后,您应该将您的网络服务器配置为将来自客户端的请求解释为UTF-8。使用tomcat时,在Connector-tag上设置URIEncoding参数:

<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8" />