2011-03-24 23 views
1

我使用以下代碼在默認瀏覽器中顯示NSE索引。如何刪除java.net.URI語法異常

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已從yahoo網站本身複製。然而,當我運行代碼,我得到錯誤,如:

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

我不知道什麼是錯的;我已經做了與其他網址成功的相同。請幫忙。

+0

我改變了我的網址http://in.finance.yahoo.com/q?s=^NSEI。不過,它顯示錯誤。所以,我從查詢中刪除^。它的工作原理,但我沒有得到我想要的網頁。 isnt ^允許在URL中的URL – CyprUS 2011-03-24 06:53:41

+0

對於一般的解決方案有看看http://stackoverflow.com/questions/749709/how-to-deal-with-the-urisyntaxexception/15570670#15570670 – GKislin 2013-03-22 12:51:54

+0

對於更一般的解決方案有一個看看http://stackoverflow.com/a/20874602/205607 ;-) – smola 2014-01-02 00:07:24

回答

5

按照此鏈接:

http://www.blooberry.com/indexdot/html/topics/urlencoding.htm插入符號( 「^」)來下不安全類別。

「不安全字符」原因:某些 字符呈現正在爲 各種原因在URL中誤解的 的可能性。這些字符 也應始終進行編碼。

^更改爲%5E後,它可以正常工作。

現在,如果您從瀏覽器中複製網址並將其放入其他瀏覽器,那麼它將起作用。我認爲瀏覽器在內部照顧special字符。但在java中,java.net.URL應該可以與獨立和控制檯應用程序以及不同的平臺一起使用,因此,開發人員有責任關注編碼special字符。

Google for java based URL encoders。

0

我想你應該URL編碼,你的字符串:

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

你不應該「URL編碼」整個字符串...只是^ NSEI部分... – ftrotter 2014-04-07 23:50:47