Di Jawa, saya ingin mengonversi ini:
https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2Fmybook.do%3Frequest_type
Untuk ini:
https://mywebsite/docs/english/site/mybook.do&request_type
Inilah yang saya miliki sejauh ini:
class StringUTF
{
public static void main(String[] args)
{
try{
String url =
"https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2Fmybook.do" +
"%3Frequest_type%3D%26type%3Dprivate";
System.out.println(url+"Hello World!------->" +
new String(url.getBytes("UTF-8"),"ASCII"));
}
catch(Exception E){
}
}
}
Tapi itu tidak berhasil. Apa ini %3A
dan %2F
format yang disebut dan bagaimana cara mengubahnya?
java
url-encoding
crackerplace
sumber
sumber
url
string adalah ASCII, dan ini juga berlaku setelah string telah diterjemahkan URL.'%'
adalah char ASCII dan%xx
mewakili char ASCII jikaxx
kurang dari (heksadesimal)80
.Jawaban:
Ini tidak ada hubungannya dengan pengkodean karakter seperti UTF-8 atau ASCII. String yang Anda miliki di sana adalah URL yang disandikan . Pengkodean semacam ini adalah sesuatu yang sama sekali berbeda dari pengkodean karakter.
Coba sesuatu seperti ini:
Java 10 menambahkan dukungan langsung
Charset
ke API, artinya tidak perlu untuk menangkap UnsupportedEncodingException:Perhatikan bahwa pengkodean karakter (seperti UTF-8 atau ASCII) adalah yang menentukan pemetaan karakter menjadi byte mentah. Untuk pengenalan pengodean karakter yang baik, lihat artikel ini .
sumber
URLDecoder
bersifat statis sehingga Anda tidak perlu membuat instance baru."UTF-8"
) dihentikan menurut dokumentasi Java 7 API. Gunakan versi dengan dua parameter.StandardCharsets.UTF_8.name()
dari paket ini:java.nio.charset.StandardCharsets
. Relevan dengan ini: tautanString yang Anda punya ada dalam
application/x-www-form-urlencoded
encoding.Gunakan URLDecoder untuk mengubahnya menjadi Java String.
sumber
Ini telah dijawab sebelumnya (meskipun pertanyaan ini yang pertama!):
Seperti yang dinyatakan oleh dokumentasi kelas URL :
Pada dasarnya:
akan memberimu:
sumber
URLDecoder.decode(String, String)
kelebihannya tidak ditinggalkan. Anda harus merujuk keURLDecoder.decode(String)
kelebihan tanpa pengkodean. Anda mungkin ingin memperbarui posting Anda untuk klarifikasi.@deprecated The resulting string may vary depending on the platform's default encoding. Instead, use the decode(String,String) method to specify the encoding.
https%3A%2F...
), hanya sebagai jalur URI; tidak ada otoritas, atau permintaan, dll. Ini dapat diuji dengan memanggil masing-masing metode get pada objek URI. Jika Anda meneruskan teks yang diterjemahkan ke konstruktor URI:,new URI("https://mywebsite/do.....")
maka memanggilgetPath()
dan metode lain akan memberikan hasil yang benar.%3A
dan%2F
merupakan karakter yang disandikan URL. Gunakan kode java ini untuk mengubahnya kembali menjadi:
dan/
sumber
sumber
sumber
Saya menggunakan apache commons
Charset default adalah
UTF-8
sumber
Anda dapat memilih metode Anda dengan bijak :)
sumber
Menggunakan kelas java.net.URI:
Harap perhatikan bahwa penanganan pengecualian bisa lebih baik, tetapi tidak terlalu relevan untuk contoh ini.
sumber