java.net.URLEncoder.encode (String) kullanımdan kaldırıldı, bunun yerine ne kullanmalıyım?


192

Kullanırken aşağıdaki uyarıyı alıyorum java.net.URLEncoder.encode:

uyarı: [kullanımdan kaldırma] kodlaması (java.lang.String)
         java.net.URLEncoder kullanımdan kaldırıldı

Bunun yerine ne kullanmalıyım?


23
Bu, dokümanlardaki kullanımdan kaldırma etiketinde yanıtlanır: "Bunun yerine, kodlamayı belirtmek için encode (String, String) yöntemini kullanın." Bkz. Java.sun.com/javase/6/docs/api/java/net/URLEncoder.html .
Michael Myers

Yanıtlar:


278

URLEncoder'daki diğer encodeyöntemi kullanın :

URLEncoder.encode(String, String)

İlk parametre kodlanacak metindir; ikincisi, kullanılacak karakter kodlamasının adıdır (örn UTF-8.). Örneğin:

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

14
@jsh: Kafam karıştı, neden bir URLDecoder olmamalı? Bu neden Java'yı şişiriyor? Bunlar statik yöntemlerdir. Yazmak da aynı miktarda çaba gerektirir. Python'dan hoşlanıyorsanız, neden Java'da programlama yapıyorsunuz? Java'nın Python'dan daha fazla kişi kullandığı ve Python işi yerine bir Java işiniz olduğu için mi?
stepanian

10
Şişirilmiş diyor çünkü küresel sınıf isim alanını aşırı dolduruyor. URL.encode ve URL.decode'unuza sahip olabileceğinizde neden URLEncoder.encode ve URLDecoder.decode, hatta sadece URLEncoder.decode? Neden hepsini gereksiz ve şişkin yapıyorsun? Çünkü java.
BT

30
UTF-8'in hemen hemen her yerde desteklenmesine rağmen, UnsupportedEncodingException'ı işlemek zorundasınız.
Dave Cameron

8
: @tc .: Java 7 bu sabitleri tanıtıldı StandardCharsets.US_ASCII, StandardCharsets.UTF_8maalesef vb URLEncoder.encodebir kabul etmez Charset... (ama birçok diğer moethods yapmak).
sleske

12
Küçük öneri - kullanım URLEncoder.encode(<urlStringToBeEncoded>, StandardCharsets.UTF_8.name()). Statik sabit kullanılması UTF_8sitesindeki toString()karakter kodlama şeması gibi bir yöntem atar java.nio.charset.IllegalCharsetNameException: java.nio.charset.CharsetICU[UTF-8]şekilde toString()geri dönüş 'java.nio.charset.CharsetICU [UTF-8]'. İstenen "UTF-8" i elde etmek için bunun name()yerine yöntemini kullanın.
et_l


24

URLEncoder sınıfını kullanın :

URLEncoder.encode(String s, String enc)

Nerede :

s - Çevrilecek dize.

enc - Desteklenen bir karakter kodlamasının adı .

Standart karakter setleri:

US-ASCII Yedi bit ASCII, aka ISO646-US, aka Unicode karakter kümesinin Temel Latin bloğu ISO-8859-1 ISO Latin Alfabesi No. 1, aka ISO-LATIN-1

UTF-8 Sekiz Bit UCS Dönüşüm Formatı

UTF-16BE Onaltı-bit UCS Dönüşüm Formatı, big-endian bayt sırası

UTF-16LE Onaltı-bit UCS Dönüşüm Biçimi, küçük endian bayt sırası

UTF-16 Onaltı-bit UCS Dönüşüm Biçimi, isteğe bağlı bayt sırası işaretiyle tanımlanan bayt sırası

Misal:

import java.net.URLEncoder;

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

1

İlk parametre kodlanacak String'dir; ikincisi, kullanılacak karakter kodlamasının adıdır (örneğin, UTF-8).


0

Diğer yanıtlar için ek bir referans olarak, "UTF-8" kullanmak yerine şunları kullanabilirsiniz:

HTTP.UTF_8

Java 4'ten beri org.apache.http.protocol kütüphanesinin bir parçası olarak dahil edilmiştir ve Android API 1'den beri de dahil edilmiştir.


Yanlış , bu sınıf Apache HttpClient 4.x kütüphane org.apache.http.protocol.HTTPsınıfında bulunur.
Buhake Sindi

@BuhakeSindi doğru, API 1 okudum ama Java değil Android, Java 7 önce her iki şekilde var, zaten haha ​​bile kullanımdan kaldırıldı.
htafoya

Hayır, bu sınıf hiçbir zaman Java JDK'nın hiçbir sürümünde bulunmadı. Android Apache HttpClient kütüphanesini takip eder (kaynak kodunu da oradan alırlarsa şaşırmam).
Buhake Sindi

3
uyarı: [kullanımdan kaldırma] HTTP'deki UTF_8 kullanımdan kaldırıldı .
sgtdck

0

Kullanımı org.apache.commons.httpclient.URIkesinlikle bir sorun değildir; önemli olan , amortismana tabi tutulan yanlış kurucuyu hedeflemenizdir .

Sadece

new URI( [string] );

Will gerçekten amortisman olarak işaretler. Gerekli olan en az bir ek argüman (ilk, aşağıda) ve ideal olarak iki sağlamaktır:

  1. escaped: URI karakter dizisi kaçış biçimindeyse true. aksi takdirde yanlış.
  2. charset: gerekirse kodlamadan kaçmak için karakter dizisi

Bu, o sınıftaki amortismana tabi olmayan bir kurucuyu hedef alacaktır. Dolayısıyla ideal bir kullanım şöyle olur:

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

Oyunda biraz deli-geç (11 yıl sonra bir saç - egad! ), Ama umarım bu başka birine yardımcı olur, özellikle uzaktaki yöntem hala bir URI bekliyorsa org.apache.commons.httpclient.setURI().

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.