java.lang.IllegalArgumentException:索引处的路径中的非法字符

问题描述:

在链接中,我有{}字符。在chrome/ff(也就是?)中,当我点击该链接时,它将用%7B}替换{,用%7D替换{。不幸的是,在歌剧中它不是。如果我的URLEncoder.encode的链接,然后%7B在其他浏览器中变成%257B(那么我得到一个404 @资源)。所以当我点击歌剧中的链接时,我得到了java.lang.IllegalArgumentException: Illegal character in path at index。我很困惑:java.lang.IllegalArgumentException:索引处的路径中的非法字符

  1. 为什么不对歌剧编码{}
  2. 为什么抛出异常?为什么不直接编码URL并继续?
  3. 如何解决这个问题,而不会破坏其他浏览器中的链接(附加编码)?

编辑:我们使用jersey,因为它的堆栈跟踪说:

java.lang.IllegalArgumentException: Illegal character in path at index 
    java.net.URI.create(URI.java:859) 
    javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:95) 
    com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:879) 
    com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:843) 
    com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:804) 

混淆(即它是严重命名)URLEncoder的是为将数据作为参数,而不是用于编码网址本身。

我们用org.apache.commons.httpclient.util.URIUtil.encodePath但看起来现在这已经走了(因为1.4?),并且建议是使用java.net.URI中的,而不是: What happened to URIUtil.encodePath from commons-httpclient-3.1?

看看这个吧:HTTP URL Address Encoding in Java