java.net.URLEncoder.encode (String)는 더 이상 사용되지 않습니다. 대신 무엇을 사용해야합니까?


192

사용할 때 다음 경고가 나타납니다 java.net.URLEncoder.encode.

경고 : [deprecation] encode (java.lang.String)
         java.net.URLEncoder에서 더 이상 사용되지 않습니다.

대신 무엇을 사용해야합니까?


23
이는 문서의 deprecation 태그에서 답변됩니다. "대신 encode (String, String) 메소드를 사용하여 인코딩을 지정하십시오." java.sun.com/javase/6/docs/api/java/net/URLEncoder.html을 참조하십시오 .
Michael Myers

답변:


278

URLEncoder 에서 다른 encode방법을 사용 하십시오 .

URLEncoder.encode(String, String)

첫 번째 매개 변수는 인코딩 할 텍스트입니다. 두 번째는 사용할 문자 인코딩의 이름입니다 (예 :) UTF-8. 예를 들면 다음과 같습니다.

System.out.println(
  URLEncoder.encode(
    "urlParameterString",
    java.nio.charset.StandardCharsets.UTF_8.toString()
  )
);

14
@ jsh : 혼란스러워 왜 URLDecoder가 없어야합니까? 이것이 왜 Java를 부 풀리게합니까? 이들은 정적 메소드입니다. 입력하는데도 같은 노력이 필요합니다. 파이썬을 좋아한다면 왜 Java로 프로그래밍합니까? 파이썬보다 Java를 사용하는 사람이 더 많기 때문에 파이썬 대신 Java 직업을 얻었습니까?
stepanian

10
그는 글로벌 클래스 네임 스페이스를 과도하게 사용하기 때문에 그것을 부풀렸다. URL.encode 및 URL.decode 또는 URLEncoder.decode를 가질 수 있는데 왜 URLEncoder.encode 및 URLDecoder.decode가 있습니까? 왜 모든 것을 중복하고 불쾌하게 만드는가? 자바이기 때문에.
BT

30
UTF-8이 거의 모든 곳에서 지원되어야하지만 UnsupportedEncodingException을 처리해야합니다.
Dave Cameron

8
: @tc : 자바 7은 이러한 상수를 도입 StandardCharsets.US_ASCII, StandardCharsets.UTF_8불행하게도, 등 URLEncoder.encodea를하지 않습니다 Charset... (그러나 다른 많은 moethods가 할).
썰매 타기

12
작은 제안-사용 URLEncoder.encode(<urlStringToBeEncoded>, StandardCharsets.UTF_8.name()). 문자 인코딩 체계로 정적 상수 UTF_8toString()메소드를 사용하면 "java.nio.charset.CharsetICU [UTF-8]" java.nio.charset.IllegalCharsetNameException: java.nio.charset.CharsetICU[UTF-8]toString()리턴됩니다. 원하는 "UTF-8"을 얻으려면 name()대신 해당 방법을 사용하십시오.
et_l


24

URLEncoder 클래스를 사용하십시오 .

URLEncoder.encode(String s, String enc)

어디 :

s- 번역 할 문자열

enc- 지원되는 문자 인코딩 의 이름 .

표준 문자셋 :

US-ASCII 7 비트 ASCII, 일명 ISO646-US, 일명 유니 코드 문자 집합의 기본 라틴 블록 ISO-8859-1 ISO 라틴 알파벳 1, 일명 ISO-LATIN-1

UTF-8 8 비트 UCS 변환 형식

UTF-16BE 16 비트 UCS 변환 형식, 빅 엔디안 바이트 순서

UTF-16LE 16 비트 UCS 변환 형식, 리틀 엔디안 바이트 순서

UTF-16 16 비트 UCS 변환 형식, 선택적 바이트 순서 표시로 식별되는 바이트 순서

예:

import java.net.URLEncoder;

String stringEncoded = URLEncoder.encode(
    "This text must be encoded! aeiou áéíóú ñ, peace!", "UTF-8");

1

첫 번째 매개 변수는 인코딩 할 문자열입니다. 두 번째는 사용할 문자 인코딩의 이름입니다 (예 : UTF-8).


0

다른 응답에 대한 추가 참조로 "UTF-8" 을 사용하는 대신 다음을 사용할 수 있습니다.

HTTP.UTF_8

이는 org.apache.http.protocol 라이브러리의 일부로 Java 4부터 포함되어 있으며 Android API 1부터 포함되어 있습니다.


잘못 이 클래스는 아파치 HttpClient를 4.x의 도서관에서 발견되는 org.apache.http.protocol.HTTP클래스입니다.
Buhake Sindi

@BuhakeSindi 사실, API 1을 읽었지만 Java가 아닌 Android였습니다 .Java 7 이전에 존재하는 방식 중 하나입니다.
htafoya

아니오,이 클래스 는 Java JDK의 어떤 버전에도 존재 하지 않습니다 . 안드로이드는 Apache HttpClient 라이브러리를 따릅니다 (소스 코드를 가져 왔더라도 놀라지 않을 것입니다).
Buhake Sindi

3
경고 : [더 이상 사용되지 않음] HTTP에서 UTF_8이 더 이상 사용되지 않습니다 .
sgtdck

0

사용법은 org.apache.commons.httpclient.URI엄격히 문제가 아닙니다. 문제는 잘못된 생성자를 타겟팅하여 감가 상각 한다는 것 입니다 .

그냥 사용

new URI( [string] );

실제로 감가 상각 된 것으로 표시합니다. 최소한 하나의 추가 인수 (첫 번째, 아래)와 이상적으로는 두 가지를 제공해야합니다.

  1. escaped: URI 문자 시퀀스가 ​​이스케이프 된 형식 인 경우 true입니다. 그렇지 않으면 거짓.
  2. charset: 필요한 경우 이스케이프 인코딩을 수행 할 문자 세트 문자열

이것은 해당 클래스 내에서 감가 상각되지 않은 생성자를 대상으로합니다. 따라서 이상적인 사용법은 다음과 같습니다.

new URI( [string], true, StandardCharsets.UTF_8.toString() );

게임에서 약간 미쳤지 만 (11 년이 지난 머리카락 -egad! ), 특히 맨 끝에있는 메소드가 여전히 와 같은 URI를 기대하는 경우 다른 사람에게 도움이되기를 바랍니다 org.apache.commons.httpclient.setURI().

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.