Строгое декодирование состоит из явных проверок. Источник должен быть ASCII, после каждого процента нужны две hex-цифры, а поток байтов должен читаться как UTF-8 без символов замены. Только после этого URLCodec кодирует текст снова и проверяет каноничность записи.
Неверный escape отмечается на проценте
Завершающий %, однозначный escape %2 или не-hex %GG завершается ошибкой с первой нужной позицией. Инструмент не удаляет процент, не дополняет цифру и не сохраняет неверный фрагмент как обычный текст. Ввод остаётся доступным, а старый успешный результат скрывается.
Один проход исключает скрытую рекурсию
Ввод %252F после одного прохода означает текст %2F. URLCodec останавливается и не превращает новую похожую последовательность в слеш. Каждый запуск воспроизводим и не меняет смысл из-за скрытого числа проходов. Повторяйте декодирование явно только по контракту целевой системы.
Проверьте целевой компонент
Процентное кодирование зависит от контекста. URLCodec намеренно преобразует одно значение и не разбирает полный URL, не делит query-пары, не нормализует путь, не проверяет адрес и не решает, ждёт ли другая система правила HTML-формы. Вставляйте результат только в тот компонент, контракт которого проверен. Кодирование меняет представление, но не шифрует, не аутентифицирует, не очищает и не делает адрес безопасным.