Кодировать 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

пожалуйста, прокомментируйте, если это не удовлетворяет вашим требованиям или сталкивается с любой другой проблемой.

Спасибо

Другие вопросы по тегам