programing

URL 디코딩은 Java에서 어떻게 하나요?

javaba 2022. 7. 29. 23:56
반응형

URL 디코딩은 Java에서 어떻게 하나요?

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에 대한 직접 지원이 추가되었습니다.CharsetUnsupported Encoding Exception을 캐치할 필요가 없습니다.

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

문자 인코딩(UTF-8이나 ASCII 등)은 문자와 원시 바이트의 매핑을 결정합니다.문자 인코딩에 대한 좋은 소개는 이 문서를 참조하십시오.

당신이 가지고 있는 끈은 안에 있다.application/x-www-form-urlencoded부호화를 실시합니다.

URLDecoder를 사용하여 Java String으로 변환합니다.

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

이것은 이전에 답변된 적이 있습니다(이 질문은 처음이었습니다만).

java.net 를 사용해 주세요.URLDecoder 클래스가 x-www-form-urlencoded 디코딩을 할 때 URI가 이를 위해 사용됩니다(이름에 관계없이 폼 데이터용).

URL 클래스 문서에는 다음과 같이 기술되어 있습니다.

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

URLEncoderURLDecoder 클래스도 사용할 수 있지만 RFC2396에서 정의되어 있는 인코딩 방식과는 다른HTML 형식의 인코딩에만 사용할 수 있습니다.

기본적으로:

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그리고.%2F는 URL 인코딩 문자입니다.이 Java 코드를 사용하여 다시 변환합니다.:그리고./

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;

    }

Apache Commons를 사용합니다.

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

기본 문자 집합은 다음과 같습니다.UTF-8

import java.io.UnsupportedEncodingException;
import java.net.URISyntaxException;

public class URLDecoding { 

    String decoded = "";

    public String decodeMethod(String url) throws UnsupportedEncodingException
    {
        decoded = java.net.URLDecoder.decode(url, "UTF-8"); 
        return  decoded;
//"You should use java.net.URI to do this, as the URLDecoder class does x-www-form-urlencoded decoding which is wrong (despite the name, it's for form data)."
    }

    public String getPathMethod(String url) throws URISyntaxException 
    {
        decoded = new java.net.URI(url).getPath();  
        return  decoded; 
    }

    public static void main(String[] args) throws UnsupportedEncodingException, URISyntaxException 
    {
        System.out.println(" Here is your Decoded url with decode method : "+ new URLDecoding().decodeMethod("https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2Fmybook.do%3Frequest_type")); 
        System.out.println("Here is your Decoded url with getPath method : "+ new URLDecoding().getPathMethod("https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2Fmybook.do%3Frequest")); 

    } 

}

방법을 현명하게 선택할 수 있습니다:)

정수값이면 Number를 잡아야 합니다.Format Exception도 마찬가지입니다.

try {
        Integer result = Integer.valueOf(URLDecoder.decode(urlNumber, "UTF-8"));
    } catch (NumberFormatException | UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

java.net 를 사용합니다.URI 클래스:

public String getDecodedURL(String encodedUrl) {
    try {
        URI uri = new URI(encodedUrl);
        return uri.getScheme() + ":" + uri.getSchemeSpecificPart();
    } catch (Exception e) {
        return "";
    }
}

예외 처리는 더 나을 수 있지만 이 예와 크게 관련이 없습니다.

언급URL : https://stackoverflow.com/questions/6138127/how-to-do-url-decoding-in-java

반응형