Saya mendapatkan peringatan berikut saat menggunakan java.net.URLEncoder.encode
:
peringatan: [deprecation] encode (java.lang.String) di java.net.URLEncoder telah ditinggalkan
Apa yang harus saya gunakan?
Saya mendapatkan peringatan berikut saat menggunakan java.net.URLEncoder.encode
:
peringatan: [deprecation] encode (java.lang.String) di java.net.URLEncoder telah ditinggalkan
Apa yang harus saya gunakan?
Jawaban:
Gunakan encode
metode lain di URLEncoder :
URLEncoder.encode(String, String)
Parameter pertama adalah teks yang akan dikodekan; yang kedua adalah nama pengkodean karakter untuk digunakan (misalnya, UTF-8
). Sebagai contoh:
System.out.println(
URLEncoder.encode(
"urlParameterString",
java.nio.charset.StandardCharsets.UTF_8.toString()
)
);
StandardCharsets.US_ASCII
, StandardCharsets.UTF_8
dll Sayangnya, URLEncoder.encode
tidak menerima Charset
... (tapi banyak moethods lain lakukan).
URLEncoder.encode(<urlStringToBeEncoded>, StandardCharsets.UTF_8.name())
. Menggunakan statis konstan UTF_8
's toString()
metode sebagai skema pengkodean karakter melempar java.nio.charset.IllegalCharsetNameException: java.nio.charset.CharsetICU[UTF-8]
sebagai toString()
hasil 'java.nio.charset.CharsetICU [UTF-8]'. Untuk mendapatkan "UTF-8" yang diinginkan, gunakan name()
metode ini.
Kamu harus menggunakan:
URLEncoder.encode("NAME", "UTF-8");
Gunakan kelas URLEncoder :
URLEncoder.encode(String s, String enc)
Dimana:
s - String yang akan diterjemahkan.
enc - Nama pengkodean karakter yang didukung .
Rangkaian standar:
US-ASCII Seven-bit ASCII, alias ISO646-AS, alias blok Latin Dasar dari karakter Unicode mengatur ISO-8859-1 ISO Latin Alphabet No. 1, alias ISO-LATIN-1
UTF-8 Delapan-bit Format Transformasi UCS
UTF-16BE Enam belas-bit Format Transformasi UCS, urutan byte big-endian
UTF-16LE Format Transformasi UCS Enam Belas-bit, urutan byte-endian kecil
UTF-16 Enam belas-bit UCS Transformation Format, urutan byte diidentifikasi oleh tanda urutan byte opsional
Contoh:
import java.net.URLEncoder;
String stringEncoded = URLEncoder.encode(
"This text must be encoded! aeiou áéíóú ñ, peace!", "UTF-8");
Parameter pertama adalah String untuk disandikan; yang kedua adalah nama pengkodean karakter yang akan digunakan (misalnya, UTF-8).
Sebagai referensi tambahan untuk respons lain, alih-alih menggunakan "UTF-8" Anda dapat menggunakan:
HTTP.UTF_8
yang disertakan sejak Java 4 sebagai bagian dari pustaka org.apache.http.protocol, yang disertakan juga sejak Android API 1.
org.apache.http.protocol.HTTP
kelas perpustakaan Apache HttpClient 4.x.
Penggunaan org.apache.commons.httpclient.URI
tidak sepenuhnya merupakan masalah; apa masalah adalah bahwa Anda menargetkan konstruktor yang salah, yang adalah disusutkan.
Menggunakan adil
new URI( [string] );
Memang akan menandai itu sebagai disusutkan. Yang diperlukan adalah menyediakan setidaknya satu argumen tambahan (yang pertama, di bawah), dan idealnya dua:
escaped
: true jika urutan karakter URI dalam bentuk escaped. salah kalau tidak.charset
: string charset untuk melakukan escape encoding, jika perluIni akan menargetkan konstruktor yang tidak disusutkan di dalam kelas itu. Jadi penggunaan yang ideal adalah seperti itu:
new URI( [string], true, StandardCharsets.UTF_8.toString() );
Agak gila di akhir permainan (rambut lebih dari 11 tahun kemudian - egad! ), Tapi saya harap ini membantu orang lain, terutama jika metode di ujung masih mengharapkan URI, seperti org.apache.commons.httpclient.setURI()
.