URI 매개 변수 값을 어떻게 인코딩합니까?
쿼리 / 매트릭스 매개 변수의 값으로 URI를 보내고 싶습니다. 기존 URI에 추가하려면 먼저 RFC 2396에 따라 인코딩해야합니다. 예를 들어 다음과 같이 입력합니다.
http://google.com/resource?key=value1 & value2
출력을 기대합니다.
http%3a%2f%2fgoogle.com%2fresource%3fkey%3dvalue1%2520%26%2520value2
어느 쪽 java.net.URLEncoder
도 java.net.URI
올바른 출력을 생성 하지 않습니다 . URLEncoder
RFC 2396과 동일하지 않은 HTML 형식 인코딩을 URI
위한 것입니다. 한 번에 단일 값을 인코딩하는 메커니즘이 없으므로 value1과 value2가 동일한 키의 일부라는 것을 알 수 없습니다.
Jersey의 UriBuilder 는 필요에 따라 application / x-www-form-urlencoded 및 RFC 3986을 사용하여 URI 구성 요소를 인코딩합니다. Javadoc에 따르면
빌더 메서드는 쿼리 매개 변수에 대한 application / x-www-form-urlencoded 미디어 유형 규칙에 따라 해당 URI 구성 요소에서 허용되지 않는 문자의 컨텍스트 인코딩을 수행하고 다른 모든 구성 요소에 대해서는 RFC 3986을 수행합니다. 특정 구성 요소에서 허용되지 않는 문자 만 인코딩되므로 예를 들어 경로 메서드 중 하나에 제공된 경로에는 구분 기호가 합법적 인 문자이고 인코딩되지 않으므로 행렬 매개 변수 또는 다중 경로 세그먼트가 포함될 수 있습니다. 허용되는 경우 백분율 인코딩 값도 인식되며 이중 인코딩되지 않습니다.
Spring의 UriUtils를 사용할 수도 있습니다.
답변에 대해 언급 할만한 평판이 충분하지 않지만 JSR-311 API를 다운로드하는 것만으로는 작동하지 않는다는 점에 유의하고 싶었습니다. 참조 구현 ( jersey ) 을 다운로드해야합니다 .
JSR 페이지에서 API를 다운로드하는 경우에만 API가 런타임에 구현을 찾으려고 할 때 ClassNotFoundException이 발생합니다.
내가 직접 작성했는데 짧고 매우 간단하며 원하는 경우 복사 할 수 있습니다. http://www.dmurph.com/2011/01/java-uri-encoder/
Google GData-java-client의 CharEscapers 가 원하는 것을 가지고있는 것 같습니다 . uriPathEscaper 메소드, uriQueryStringEscaper 및 일반 uriEscaper가 있습니다. (모두 실제 이스케이프를 수행하는 Escaper 객체를 반환합니다.) Apache 라이선스.
나는 당신이 찾고 있는 URI 클래스 라고 생각합니다 .
Mmhh 나는 당신이 이미 URLEncoder를 버렸다는 것을 알고 있지만, 문서가 말하는 것에도 불구하고 나는 그것을 시도하기로 결정했습니다.
당신은 말했다 :
예를 들어 다음과 같은 입력이 주어집니다.
http://google.com/resource?key=value
출력을 기대합니다.
http % 3a % 2f % 2fgoogle.com % 2fresource % 3fkey % 3dvalue
그래서:
C:\oreyes\samples\java\URL>type URLEncodeSample.java
import java.net.*;
public class URLEncodeSample {
public static void main( String [] args ) throws Throwable {
System.out.println( URLEncoder.encode( args[0], "UTF-8" ));
}
}
C:\oreyes\samples\java\URL>javac URLEncodeSample.java
C:\oreyes\samples\java\URL>java URLEncodeSample "http://google.com/resource?key=value"
http%3A%2F%2Fgoogle.com%2Fresource%3Fkey%3Dvalue
예상대로.
이것의 문제는 무엇입니까?
참조 URL : https://stackoverflow.com/questions/444112/how-do-i-encode-uri-parameter-values
'Programing' 카테고리의 다른 글
HTML 콘텐츠가 포함 된 contentEditable 영역에서 캐럿 (커서) 위치 가져 오기 (0) | 2020.12.31 |
---|---|
std 네임 스페이스를 전문화 할 수있는 것과 할 수없는 것은 무엇입니까? (0) | 2020.12.31 |
파일 린트 메시지 처리 방법 : 경고 : 메서드가 함수일 수 있음 (0) | 2020.12.31 |
Javascript에 소수점 두 개를 추가하면 잘못된 결과가 생성되는 이유는 무엇입니까? (0) | 2020.12.31 |
다중 처리의 공유 메모리 (0) | 2020.12.31 |