Строгое декодирование состоит из явных проверок. Источник должен быть ASCII, после каждого процента нужны две hex-цифры, а поток байтов должен читаться как UTF-8 без символов замены. Только после этого URLCodec кодирует текст снова и проверяет каноничность записи.

Неверный escape отмечается на проценте

Завершающий %, однозначный escape %2 или не-hex %GG завершается ошибкой с первой нужной позицией. Инструмент не удаляет процент, не дополняет цифру и не сохраняет неверный фрагмент как обычный текст. Ввод остаётся доступным, а старый успешный результат скрывается.

Один проход исключает скрытую рекурсию

Ввод %252F после одного прохода означает текст %2F. URLCodec останавливается и не превращает новую похожую последовательность в слеш. Каждый запуск воспроизводим и не меняет смысл из-за скрытого числа проходов. Повторяйте декодирование явно только по контракту целевой системы.

Проверьте целевой компонент

Процентное кодирование зависит от контекста. URLCodec намеренно преобразует одно значение и не разбирает полный URL, не делит query-пары, не нормализует путь, не проверяет адрес и не решает, ждёт ли другая система правила HTML-формы. Вставляйте результат только в тот компонент, контракт которого проверен. Кодирование меняет представление, но не шифрует, не аутентифицирует, не очищает и не делает адрес безопасным.