Я использовал это и, похоже, работает нормально.
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 Encoding. Но это работает по-другому. See if it helps:
String encoded = URLEncoder.encode(input, "US-ASCII");
Надеется, что это помогает!
Привет, оба варианта, похоже, работают. Почему второй вариант работает «немного по-другому». Кажется, он дает тот же результат, что и первый вариант. – user3573403
Выход веб-сайта не совсем корректен. Он должен кодировать символ /, но это не так. – user3573403
Второй работает по-разному. Например, он не заменяет пространство '% 20', но вместо этого заменяет собой' + '. Что-то подобное происходит и с другими персонажами. – anacron