2011-03-24 4 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은 야후 사이트에서 복사되었습니다. 인덱스 쿼리에 불법 문자 140 :

java.net.URISyntaxException : 내가 코드를 실행할 때, 내가 같은 오류가 http://in.finance.yahoo.com/q;_ylt=AkieA_4_rXXRBh2SH7_U3kXyULlG;_ylu=X3oDMTE1Nmc5cjBnBHBvcwMyBHNlYwNmb290ZXIteWZpbmFuY2UEc2xrA25pZnR5NTA-?s=^NSEI는

내가 그나마

는 무엇을 잘못 알고 ; 나는 다른 URL과 동일하게 성공했다. 도와주세요. 이 링크 당으로

+0

내가 http://in.finance.yahoo.com/q?s=^NSEI 내 URL을 변경했습니다. 그래도 오류가 표시됩니다. 그래서 ^를 쿼리에서 제거했습니다. 그것은 작동하지만, 내가 원하는 페이지를 얻지 못한다. Java에서 URL에 허용되지 않습니다. – CyprUS

+0

일반적인 해결책은 http://stackoverflow.com/questions/749709/how-to-deal-with-the-urisyntaxexception/15570670#15570670 – GKislin

+0

에서 좀 더 일반적인 해결책을 찾으려면 http://stackoverflow.com/a/20874602/205607 ;-) – smola

답변

5

:

http://www.blooberry.com/indexdot/html/topics/urlencoding.htm 캐럿 ("^") 안전하지 않은 범주에 온다. 왜

"안전하지 않은 문자는"일부 문자가 제시 의 가능성이 여러 가지 이유로 URL을 내 오해된다. 이러한 문자 인 도 항상 인코딩해야합니다.

^을 % 5E (으)로 변경하면 작동합니다.

이제 브라우저에서 URL을 복사하여 다른 브라우저에 넣으면 작동합니다. 브라우저가 내부적으로 special 문자를 처리한다고 생각합니다. 그러나 Java에서 java.net.URL은 독립 실행 형 및 콘솔 응용 프로그램과 다른 플랫폼에서 작동하기로되어 있으므로 개발자는 special 문자를 처리해야합니다.

Google은 자바 기반 URL 인코더입니다.

0

나는 당신이 당신의 문자열을 URL 인코딩해야한다고 생각 :

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

전체 문자열을 "URL 인코딩"하면 안됩니다.^NSEI 부분 만 ... – ftrotter