Кодировать URL с помощью набора символов US-ASCII
Я имею в виду следующий веб-сайт:
http://coderstoolbox.net/string/#!encoding=xml&action=encode&charset=us_ascii
Выбрав "URL", "Кодировать" и "US-ASCII", входные данные преобразуются в требуемый выходной.
Как мне сделать такой же вывод с кодами Java?
Заранее спасибо.
2 ответа
Я использовал это, и, кажется, работает нормально.
public static String encode(String input) {
Pattern doNotReplace = Pattern.compile("[a-zA-Z0-9]");
return input.chars().mapToObj(c->{
if(!doNotReplace.matcher(String.valueOf((char)c)).matches()){
return "%" + (c<256?Integer.toHexString(c):"u"+Integer.toHexString(c));
}
return String.valueOf((char)c);
}).collect(Collectors.joining("")).toUpperCase();
}
PS: я использую 256, чтобы ограничить размещение префикса U не символами ASCII. Нет необходимости использовать префикс U для стандартных символов ASCII, которые находятся в пределах 256.
Альтернативный вариант:
Существует встроенный класс Java (java.net.URLEncoder
), который делает кодировку URL. Но это работает немного по-другому. Посмотрите, поможет ли это:
String encoded = URLEncoder.encode(input, "US-ASCII");
Надеюсь это поможет!
Ты можешь использовать ESAPi.encoder().encodeForUrl(linkString)
Проверьте более подробную информацию о encodeForUrl https://en.wikipedia.org/wiki/Percent-encoding
пожалуйста, прокомментируйте, если это не удовлетворяет вашим требованиям или сталкивается с любой другой проблемой.
Спасибо