Bei der Verwendung wird folgende Warnung angezeigt java.net.URLEncoder.encode
:
Warnung: [veraltet] codieren (java.lang.String) in java.net.URLEncoder ist veraltet
Was soll ich stattdessen verwenden?
Bei der Verwendung wird folgende Warnung angezeigt java.net.URLEncoder.encode
:
Warnung: [veraltet] codieren (java.lang.String) in java.net.URLEncoder ist veraltet
Was soll ich stattdessen verwenden?
Antworten:
Verwenden Sie die andere encode
Methode in URLEncoder :
URLEncoder.encode(String, String)
Der erste Parameter ist der zu codierende Text. Der zweite ist der Name der zu verwendenden Zeichenkodierung (z UTF-8
. B. ). Beispielsweise:
System.out.println(
URLEncoder.encode(
"urlParameterString",
java.nio.charset.StandardCharsets.UTF_8.toString()
)
);
StandardCharsets.US_ASCII
, StandardCharsets.UTF_8
usw. Leider URLEncoder.encode
akzeptiert keine a Charset
... (aber viele andere moethods tun).
URLEncoder.encode(<urlStringToBeEncoded>, StandardCharsets.UTF_8.name())
. Unter Verwendung der statischen Konstante UTF_8
‚s toString()
Verfahren wie das Zeichencodierungsschema führt java.nio.charset.IllegalCharsetNameException: java.nio.charset.CharsetICU[UTF-8]
als die toString()
returns‚java.nio.charset.CharsetICU [UTF-8]‘. Um das gewünschte "UTF-8" zu erhalten, verwenden Sie name()
stattdessen dessen Methode.
Du solltest benutzen:
URLEncoder.encode("NAME", "UTF-8");
Verwenden Sie die Klasse URLEncoder :
URLEncoder.encode(String s, String enc)
Wo :
s - Zu übersetzender String.
enc - Der Name einer unterstützten Zeichenkodierung .
Standard-Zeichensätze:
US-ASCII Sieben-Bit-ASCII, auch bekannt als ISO646-US, auch bekannt als der lateinische Basisblock des Unicode-Zeichensatzes ISO-8859-1 ISO Latin Alphabet Nr. 1, auch bekannt als ISO-LATIN-1
UTF-8 Acht-Bit-UCS-Transformationsformat
UTF-16BE 16-Bit-UCS-Transformationsformat, Big-Endian-Bytereihenfolge
UTF-16LE 16-Bit-UCS-Transformationsformat, Little-Endian-Bytereihenfolge
UTF-16 Sechzehn-Bit-UCS-Transformationsformat, Bytereihenfolge, gekennzeichnet durch eine optionale Bytereihenfolge
Beispiel:
import java.net.URLEncoder;
String stringEncoded = URLEncoder.encode(
"This text must be encoded! aeiou áéíóú ñ, peace!", "UTF-8");
Der erste Parameter ist der zu codierende String. Der zweite ist der Name der zu verwendenden Zeichenkodierung (z. B. UTF-8).
Als zusätzliche Referenz für die anderen Antworten können Sie anstelle von "UTF-8" Folgendes verwenden:
HTTP.UTF_8
Dies ist seit Java 4 als Teil der Bibliothek org.apache.http.protocol enthalten, die auch seit Android API 1 enthalten ist.
org.apache.http.protocol.HTTP
.
Die Verwendung von org.apache.commons.httpclient.URI
ist nicht ausschließlich ein Problem; was ein Problem ist , dass Sie den falschen Konstruktor Ziel, das wird abgeschrieben.
Mit just
new URI( [string] );
Wird es in der Tat als abgeschrieben kennzeichnen. Was benötigt wird, ist, mindestens ein zusätzliches Argument (das erste unten) und im Idealfall zwei anzugeben:
escaped
: true, wenn die URI-Zeichenfolge in Escape-Form vorliegt. sonst falsch.charset
: Die Zeichensatzzeichenfolge, die bei Bedarf die Escape-Codierung ausführtDies zielt auf einen nicht abgeschriebenen Konstruktor innerhalb dieser Klasse ab. Eine ideale Verwendung wäre also eine solche:
new URI( [string], true, StandardCharsets.UTF_8.toString() );
Ein bisschen verrückt spät im Spiel (ein Haar über 11 Jahre später - egad! ), Aber ich hoffe, das hilft jemand anderem, besonders wenn die Methode am anderen Ende immer noch einen URI erwartet, wie z org.apache.commons.httpclient.setURI()
.