[java] Java에서 URL 디코딩을 수행하는 방법은 무엇입니까?

Java에서는 이것을 변환하고 싶습니다.

https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2Fmybook.do%3Frequest_type

이에:

https://mywebsite/docs/english/site/mybook.do&request_type

이것이 내가 지금까지 가진 것입니다.

class StringUTF 
{
    public static void main(String[] args) 
    {
        try{
            String url = 
               "https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2Fmybook.do" +
               "%3Frequest_type%3D%26type%3Dprivate";

            System.out.println(url+"Hello World!------->" +
                new String(url.getBytes("UTF-8"),"ASCII"));
        }
        catch(Exception E){
        }
    }
}

그러나 제대로 작동하지 않습니다. 이 형식 %3A%2F형식 은 무엇 이며 어떻게 변환합니까?



답변

UTF-8 또는 ASCII와 같은 문자 인코딩과는 아무런 관련이 없습니다. 당신이 가지고있는 문자열은 URL로 인코딩 됩니다. 이런 종류의 인코딩은 문자 인코딩과 완전히 다릅니다.

다음과 같이 해보십시오 :

try {
    String result = java.net.URLDecoder.decode(url, StandardCharsets.UTF_8.name());
} catch (UnsupportedEncodingException e) {
    // not going to happen - value came from JDK's own StandardCharsets
}

Java 10 Charset은 API에 대한 직접적인 지원을 추가 하여 UnsupportedEncodingException을 잡을 필요가 없습니다.

String result = java.net.URLDecoder.decode(url, StandardCharsets.UTF_8);

• 그래도 참고 문자 인코딩 (예 : UTF-8 또는 ASCII와 같은)를 원시 바이트 문자의 매핑을 결정하는 것입니다. 문자 인코딩에 대한 좋은 소개는 이 기사를 참조 하십시오 .


답변

가지고있는 문자열은 application/x-www-form-urlencoded인코딩입니다.

URLDecoder 를 사용 하여 Java 문자열로 변환하십시오.

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


답변

이것은 이전 에 답변되었습니다 (이 질문은 처음이지만!) :

“URLDecoder 클래스가 잘못된 x-www-form-urlencoded 디코딩을 수행하기 때문에 java.net.URI를 사용해야합니다 (이름에도 불구하고 양식 데이터 용임).”

URL 클래스의 문서 상태 :

URL 인코딩 및 디코딩을 관리하는 데 권장되는 방법은 URI 를 사용 하고 toURI ()URI.toURL () 을 사용
하여이 두 클래스 간을 변환하는 입니다.

URLEncoderURLDecoder 클래스도 만에 정의 된 인코딩 방식과 동일하지 않습니다 HTML 양식 인코딩에 사용할 수있다 RFC2396 .

원래:

String url = "https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2Fmybook.do%3Frequest_type";
System.out.println(new java.net.URI(url).getPath());

당신에게 줄 것이다 :

https://mywebsite/docs/english/site/mybook.do?request_type


답변

%3A%2FURL 인코딩 된 문자입니다. 로 다시 변환이 자바 코드를 사용 :하고/

String decoded = java.net.URLDecoder.decode(url, "UTF-8");


답변

 try {
        String result = URLDecoder.decode(urlString, "UTF-8");
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


답변

public String decodeString(String URL)
    {

    String urlString="";
    try {
        urlString = URLDecoder.decode(URL,"UTF-8");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block

        }

        return urlString;

    }


답변

나는 아파치 커먼즈를 사용한다

String decodedUrl = new URLCodec().decode(url);

기본 문자셋은 UTF-8