2014-06-24 2 views
3

는 내 URL을 디코딩 할 필요가 자바 프로그램을 작성하고 난 불행하게도 완전히 해독되지 않은, 어쨌든 다 했지 달성하기 위해URL이 완전히 디코딩되지 않는 이유는 무엇입니까?

URLDecoder.decode(url,"UTF-8") 

방법을 사용하고 있습니다. 예를 들면. 위의 방법은 %3d ~ =, %2B ~ +을 디코딩하지만 디코딩 후에도 변하지 않는 %3A%2F과 같은 몇 가지 문자는 디코딩하지 않습니다. 제가 뭔가를 놓치고 있는지 말해주세요.

+0

대신 UTF-16을 사용해보세요 !! –

+0

입력 및 출력 문자열의 예를 들려 줄 수 있습니까? – bidifx

+0

@shekharsuman ** "% 3A % 2F"**를 "** 3A? 2F?"로 변환 중입니다 **. 그것은 출력이 ** :/**이되어야하므로 작업을하지 못했습니다. –

답변

6

먼저 모든 것이 예상대로 작동합니다. 문제는 입력 문자열이 두 번 인코딩된다는 것입니다. 따라서 단순히 두 번 해독하십시오.

예 :

  1. 입력 : :

코드 :

012 %3A
  • 같이 디코드 :로 %253A
  • 디코드 377,142,949,624,810,063,210

    출력 :

    40.2%2522%26url%3Dhttp%253A%252F%252Fr1 
    40.2%22&url=http%3A%2F%2Fr1 
    40.2"&url=http://r1 
    

    참고 : 이 문자열이 결과가 일정하게 유지 될 때까지 당신이 디코딩을 반복 할 수있는 인코딩 된 횟수 불확실합니다.

    String input = "40.2%2522%26url%3Dhttp%253A%252F%252Fr1"; 
    String output = input; 
    
    do { 
        input = output; 
        output = URLDecoder.decode(input, "UTF-8"); 
    
    } while (!input.equals(output));