В Java я хочу преобразовать это:
https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2Fmybook.do%3Frequest_type
К этому:
https://mywebsite/docs/english/site/mybook.do&request_type
Это то, что я до сих пор:
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){
}
}
}
Но это не работает правильно. Что это %3A
и %2F
форматы называется и как конвертировать их?
java
url-encoding
crackerplace
источник
источник
url
строке являются ASCII, и это также верно после того, как строка была декодирована URL.'%'
является символом ASCII и%xx
представляет символ ASCII, еслиxx
он меньше (шестнадцатеричный)80
.Ответы:
Это не имеет ничего общего с кодировками символов, такими как UTF-8 или ASCII. Строка, которая у вас есть, имеет URL в кодировке . Этот вид кодирования отличается от кодировки символов.
Попробуйте что-то вроде этого:
Java 10 добавила прямую поддержку
Charset
API, что означает, что нет необходимости перехватывать UnsupportedEncodingException:Обратите внимание, что кодировка символов (например, UTF-8 или ASCII) - это то, что определяет отображение символов в необработанные байты. Для хорошего введения в кодировки символов, смотрите эту статью .
источник
URLDecoder
являются статическими, поэтому вам не нужно создавать его новый экземпляр."UTF-8"
), не рекомендуется в соответствии с документацией по API Java 7. Используйте версию с двумя параметрами.StandardCharsets.UTF_8.name()
из этого пакета:java.nio.charset.StandardCharsets
. Относится к этому: ссылкаУ вас есть строка в
application/x-www-form-urlencoded
кодировке.Используйте URLDecoder для преобразования его в строку Java.
источник
Это было отвечено , прежде чем (хотя этот вопрос был первым!):
Как указано в документации класса URL :
В принципе:
дам тебе:
источник
URLDecoder.decode(String, String)
перегрузка не считается устаревшей. Вы должны ссылаться наURLDecoder.decode(String)
перегрузку без кодировки. Вы можете обновить свой пост для уточнения.@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...
) как просто путь URI; нет полномочий или запросов и т. д. Это можно проверить, вызвав соответствующие методы get для объекта URI. Если вы передадите декодированный текст в конструктор URI:,new URI("https://mywebsite/do.....")
то вызовgetPath()
и другие методы дадут правильные результаты.%3A
и%2F
являются URL-кодированными символами. Используйте этот код Java, чтобы преобразовать их обратно в:
и/
источник
источник
источник
Я использую Apache Commons
Кодировка по умолчанию
UTF-8
источник
Вы можете выбрать свой метод с умом :)
источник
Используя класс java.net.URI:
Обратите внимание, что обработка исключений может быть лучше, но это не очень важно для этого примера.
источник