2012-09-14 1 views
5
와의 URL 처리 방법

저는 Java를 처음 접했고이 문제를 해결했습니다. 나는 검색을 시도했지만 정확한 답을 얻지 못했습니다.URISyntaxException - %

나는

String name = anything 10%-20% 04-03-07 

지금은 아래처럼이 String 이름으로 URL 문자열을 구축 할 필요가 예를

에 대한 문자열이있다.

http://something.com/test/anything 10%-20% 04-03-07 

나는 공백을 % 20으로 교체 시도하고 나는이 URL을 사용하고는 잘 작동하지만, 파이어 폭스에서 해고 때 지금은

http://something.com/test/anything%2010%-20%%2004-03-07 

으로 새로운 URL을 얻고있는 동안 자바에서 처리 그것은 분명히 오류

코드가 던지고
Exception in thread "main" java.lang.IllegalArgumentException 
at java.net.URI.create(Unknown Source) 
at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:69) 
Caused by: java.net.URISyntaxException: Malformed escape pair at index 39 : 
at java.net.URI$Parser.fail(Unknown Source) 
at java.net.URI$Parser.scanEscape(Unknown Source) 
at java.net.URI$Parser.scan(Unknown Source) 
at java.net.URI$Parser.checkChars(Unknown Source) 
at java.net.URI$Parser.parseHierarchical(Unknown Source) 
at java.net.URI$Parser.parse(Unknown Source) 
at java.net.URI.<init>(Unknown Source) 
... 6 more 

을 던지고있다 0

답변

5

백분율 기호도 %25으로 인코딩합니다.

http://something.com/test/anything 10%-20% 04-03-07http://something.com/test/anything%2010%25-20%25%2004-03-07과 작동합니다.

당신은 이것에 대한 예를 URLEncoder.encode을 위해 사용할 수 있어야합니다 - 당신이

String encodedUrl = 
    String.format("http://something.com/%s/%s", 
     URLEncoder.encode("test", "UTF-8"), 
     URLEncoder.encode("anything 10%-20% 04-03-07", "UTF-8") 
    ); 

주와 같은 경로 부분, 그 전에 아무것도하지, 그래서 무언가를 urlencode 필요가 기억 : URLEncoder이 +에 공간을 인코딩 %20 대신에, 똑같이 잘 작동해야합니다. 둘 다 괜찮습니다.

+0

감사 URI를 만들 java.net.URI를 사용할 수 있습니다. 나는 그것을 벗어나려고했다. didnt는 보충 관점에서 생각한다. – Vish

-1

당신은 당신의 문자열에서 완벽하게 작동

String url = "http://something.com/test/anything 10%-20% 04-03-07" 

URI uri = new URI(
    url, 
    null); 
String request = uri.toASCIIString(); 

HttpClient httpclient = new DefaultHttpClient(); 
HttpGet httpget = new HttpGet(request); 
HttpResponse response = httpclient.execute(httpget);