I got this error message :
java.net.URISyntaxException: Illegal character in query at index 31: http://finance.yahoo.com/q/h?s=^IXIC
My_Url = http://finance.yahoo.com/q/h?s=^IXIC
When I copied it into a browser address field, it showed the correct page, it's a valid URL, but I can't parse it with this : new URI(My_Url)
I tried : My_Url=My_Url.replace("^","\\^"), but
<1> It won't be the url I need
<2> It doesn't work either
How to handle this ?
Frank
From stackoverflow
-
Use "%"-encoding for the "^" character, viz.
http://finance.yahoo.com/q/h?s=%5EIXIC
-
You need to encode the URI to replace illegal characters with legal encoded characters. If you first make a URL (so you don't have to do the parsing yourself) and then make a URI using the four-argument constructor, then the constructor will do the encoding for you.
import java.net.*; public class Test { public static void main(String[] args) { String myURL = "http://finance.yahoo.com/q/h?s=^IXIC"; try { URL url = new URL(myURL); URI uri = new URI(url.getProtocol(), url.getHost(), url.getPath(), url.getQuery(), null); System.out.println("URI " + uri.toString() + " is OK"); } catch (MalformedURLException e) { System.out.println("URL " + myURL + " is a malformed URL"); } catch (URISyntaxException e) { System.out.println("URI " + myURL + " is a malformed URL"); } } }
-
You have to encode your parameters.
Something like this will do:
import java.net.*; import java.io.*; public class EncodeParameter { public static void main( String [] args ) throws URISyntaxException , UnsupportedEncodingException { String myQuery = "^IXIC"; URI uri = new URI( String.format( "http://finance.yahoo.com/q/h?s=%s", URLEncoder.encode( myQuery , "UTF8" ) ) ); System.out.println( uri ); } }
http://java.sun.com/javase/6/docs/api/java/net/URLEncoder.html
0 comments:
Post a Comment