2017-02-15 15 views

ответ

0

Я использовал это и, похоже, работает нормально.

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"); 

Надеется, что это помогает!

+0

Привет, оба варианта, похоже, работают. Почему второй вариант работает «немного по-другому». Кажется, он дает тот же результат, что и первый вариант. – user3573403

+0

Выход веб-сайта не совсем корректен. Он должен кодировать символ /, но это не так. – user3573403

+0

Второй работает по-разному. Например, он не заменяет пространство '% 20', но вместо этого заменяет собой' + '. Что-то подобное происходит и с другими персонажами. – anacron

0

Вы можете использовать ESAPi.encoder().encodeForUrl(linkString)

Проверить более подробную информацию о encodeForUrl https://en.wikipedia.org/wiki/Percent-encoding

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

спасибо

+0

Привет, где находится ESAPI? Это не похоже, что это часть стандартного JDK. – user3573403