Проверьте ваш URL на наличие подозрительных символов [1].
Список кандидатов:
WHITE_SPACE ,", < , > , { , } , | , \ , ^ , ~ , [ , ] , .
и `
Я использую:
private static boolean isAlreadyEncoded(String passedUrl) {
boolean isEncoded = true;
if (passedUrl.matches(".*[\\ \"\\<\\>\\{\\}|\\\\^~\\[\\]].*")) {
isEncoded = false;
}
return isEncoded;
}
Для фактического кодирования я продолжаю:
https://stackoverflow.com/a/49796882/1485527
Примечание : даже если ваш URL-адрес не содержит небезопасных символов, которые вы, возможно, захотите применить, например, Кодировка Punnycode для имени хоста. Таким образом, еще есть много места для дополнительных проверок.
[1] Список кандидатов можно найти в разделе «Небезопасные» спецификации URL на странице 2.
В моем понимании '%' или '#' должны быть пропущены при проверке кодировки, так как эти символы могут встречаться и в закодированных URL.