Java - 特殊URL字符

时间:2012-01-10 06:15:01

标签: java

我有一个功能:

public static ImageIcon GetIconImageFromResource(String path){
    URL url = ARMMain.class.getResource(path);
return new ImageIcon(url);
} 

效果很好,但是如果我将.JAR文件放在例如 C:\ Ares !!! \ myfile.jar 上,它就会失败,我看不到我的图标。我发现我的网址是文件:/ C:/ Ares !!! / myfile.jar!/com/test/images/img.png 。所以在JAR扩展之后有符号!我认为这是主要原因!我该怎么做才能避免这个问题?感谢。

2 个答案:

答案 0 :(得分:5)

这显然是Java的一个问题(不仅仅是一个bug)。 JAR URL使用!/作为分隔符,但在文件路径中出现时不会将其转义。

您可以尝试自行转义,将Ares!!!/转为Ares!!%21/,但保持myfile.jar!/不变。


根据RFC3986,!是保留的子分隔符char。因此,使用它来分隔URL中的不同部分是安全的;当它出现在某个部件中时,必须以%21

进行转义

但是,处理JAR URL的Java代码显然遵循较旧的RFC2396,其中!是未预留的字符。 Java选择一个未保留的char作为分隔符是不明智的。当它发生时,它至少应该在内部逃脱它,就像保留字符一样。

答案 1 :(得分:-1)

查看URLEncoder课程。