如何删除java.net.URI语法异常

时间:2011-03-24 06:44:07

标签: java

我使用以下代码在默认浏览器中显示NSE索引。

String downloadURL = "http://in.finance.yahoo.com/q;_ylt=AkieA" +
   "_4_rXXRBh2SH7_U3kXyULlG;_ylu=X3oDMTE1Nmc5cjBnBHBvcwMyBHNlY" +
   "wNmb290ZXIteWZpbmFuY2UEc2xrA25pZnR5NTA-?s=^NSEI";
java.awt.Desktop myNewBrowserDesktop = java.awt.Desktop.getDesktop();
java.net.URI myNewLocation = new java.net.URI(downloadURL);
myNewBrowserDesktop.browse(myNewLocation);

提到的URL已从雅虎网站本身复制。但是,当我运行代码时,我得到如下错误:

  

java.net.URISyntaxException:非法   索引140处的查询中的字符:   http://in.finance.yahoo.com/q;_ylt=AkieA_4_rXXRBh2SH7_U3kXyULlG;_ylu=X3oDMTE1Nmc5cjBnBHBvcwMyBHNlYwNmb290ZXIteWZpbmFuY2UEc2xrA25pZnR5NTA-?s= ^ NSEI

我不知道出了什么问题;我已经成功地与其他网址做了同样的事情。请帮忙。

2 个答案:

答案 0 :(得分:5)

根据此链接:

http://www.blooberry.com/indexdot/html/topics/urlencoding.htm Caret(“^”)属于不安全类别。

  

“不安全字符”为什么:有些人   人物提出了可能性   被误解为URL中的   很多原因。这些人物   也应该始终编码。

^更改为%5E后,它可以正常工作。

现在,如果您从浏览器中复制网址并将其放在另一个浏览器中,那么它就能正常运行。我认为浏览器内部处理special个字符。但是在java中,java.net.URL应该与独立应用程序和控制台应用程序一起使用,并且在不同的平台上也是如此,因此,开发人员有责任处理special个字符的编码。

Google用于基于java的URL编码器。

答案 1 :(得分:0)

我认为你应该对你的字符串进行URL编码:

URI myNewLocation = new URI(URLEncoder.encode(downloadURL, "UTF-8"));