Android의 URL 인코딩
안드로이드에서 URL을 어떻게 인코딩합니까?
저는 이런 줄 알았어요
final String encodedURL = URLEncoder.encode(urlAsString, "UTF-8");
URL url = new URL(encodedURL);
위와 같이 하면,http://
안에urlAsString
로 대체됨http%3A%2F%2F
안에encodedURL
그리고 나서 나는.java.net.MalformedURLException
URL을 사용할 때.
전체 URL은 인코딩하지 않고 "신뢰할 수 없는 소스"에서 가져온 일부만 인코딩합니다.
Java:
String query = URLEncoder.encode("apples oranges", Charsets.UTF_8.name()); String url = "http://stackoverflow.com/search?q=" + query;
코틀린:
val query: String = URLEncoder.encode("apples oranges", Charsets.UTF_8.name()) val url = "http://stackoverflow.com/search?q=$query"
또는 DroidParts의 Strings.urlEncode(Stringstr)를 사용하여 선택한 예외를 발생시키지 않을 수 있습니다.
아니면 이런 것을 사용합니다.
String uri = Uri.parse("http://...")
.buildUpon()
.appendQueryParameter("key", "val")
.build().toString();
저는 여기에 한 가지 제안을 추가하려고 합니다.이렇게 하면 외부 라이브러리를 가져올 필요가 없습니다.
시도해 보십시오.
String urlStr = "http://abc.dev.domain.com/0007AC/ads/800x480 15sec h.264.mp4";
URL url = new URL(urlStr);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
url = uri.toURL();
이 URL에서 저는 요청에 사용할 수 있도록 공간을 인코딩해야 합니다.
Android 클래스에서 사용할 수 있는 몇 가지 기능을 활용합니다.첫째, URL 클래스는 URL을 적절한 구성 요소로 분할할 수 있으므로 문자열 검색/바꾸기 작업을 수행할 필요가 없습니다.두 번째로, 이 접근 방식은 URI를 단일 문자열이 아닌 구성 요소를 통해 구성 요소를 구성할 때 적절하게 이스케이프하는 URI 클래스 기능을 활용합니다.
이 접근 방식의 장점은 유효한 URL 문자열을 사용하여 사용자 자신이 특별한 지식을 필요로 하지 않고도 작동할 수 있다는 것입니다.
안드로이드의 경우 String android.net 을 사용합니다.URI.encode(문자열)
UTF-8 체계를 사용하여 지정된 문자열의 문자를 '%' 이스케이프 옥텟으로 인코딩합니다.문자("A-Z", "a-z"), 숫자("0-9") 및 예약되지 않은 문자("_-!")를 남깁니다.~'()*)'는 그대로입니다.다른 모든 문자를 인코딩합니다.
Ex/
String urlEncoded = "http://stackoverflow.com/search?q=" + Uri.encode(query);
또한 이것을 사용할 수 있습니다.
private static final String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%";
String urlEncoded = Uri.encode(path, ALLOWED_URI_CHARS);
가장 간단한 방법입니다.
try {
query = URLEncoder.encode(query, "utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
다음 방법을 사용할 수 있습니다.
public static String parseUrl(String surl) throws Exception
{
URL u = new URL(surl);
return new URI(u.getProtocol(), u.getAuthority(), u.getPath(), u.getQuery(), u.getRef()).toString();
}
또는
public String parseURL(String url, Map<String, String> params)
{
Builder builder = Uri.parse(url).buildUpon();
for (String key : params.keySet())
{
builder.appendQueryParameter(key, params.get(key));
}
return builder.build().toString();
}
두 번째가 첫 번째보다 낫습니다.
아랍 문자를 찾아서 UTF-8 인코딩으로 대체합니다. 다음과 같은 것이 있습니다.
for (int i = 0; i < urlAsString.length(); i++) {
if (urlAsString.charAt(i) > 255) {
urlAsString = urlAsString.substring(0, i) +
URLEncoder.encode(urlAsString.charAt(i)+"", "UTF-8") +
urlAsString.substring(i+1);
}
}
encodedURL = urlAsString;
언급URL : https://stackoverflow.com/questions/3286067/url-encoding-in-android
'source' 카테고리의 다른 글
OnItemClickListener가 목록 보기에서 작동하지 않음 (0) | 2023.08.10 |
---|---|
데이터베이스 링크를 통해 설명하시겠습니까? (0) | 2023.08.10 |
실행 정책을 성공적으로 변경하고 PowerShell 스크립트를 실행하도록 설정하는 방법 (0) | 2023.08.05 |
Android에 사용되는 SQLite 버전은 무엇입니까? (0) | 2023.08.05 |
M1 도커 미리 보기 및 키클로크 'image' 플랫폼(linux/amd64)이 탐지된 호스트 플랫폼(linux/arm64/v8)과 일치하지 않음' 문제 (0) | 2023.08.05 |