Процентное кодирование работает с байтами. ASCII часто даёт один байт на символ, но буквы с диакритикой, кириллица и эмодзи занимают несколько байтов UTF-8. Каждый байт, не разрешённый профилем буквально, превращается в процент и две шестнадцатеричные цифры.
Символ é даёт две последовательности
В UTF-8 символ é записывается байтами C3 A9, поэтому компонент RFC содержит %C3%A9. Это один Unicode-символ и один видимый знак, но два байта и шесть ASCII-символов результата. URLCodec показывает все представления, чтобы длина кодированной строки была объяснима.
Регистр hex не меняет чтение, но канон — верхний
Последовательности %c3%a9 и %C3%A9 задают одинаковые байты. URLCodec принимает обе при декодировании, затем кодирует текст снова и сравнивает источник с канонической записью верхним регистром. Так сохраняется совместимость, а результат становится однозначным для тестов и документации.
Проверьте целевой компонент
Процентное кодирование зависит от контекста. URLCodec намеренно преобразует одно значение и не разбирает полный URL, не делит query-пары, не нормализует путь, не проверяет адрес и не решает, ждёт ли другая система правила HTML-формы. Вставляйте результат только в тот компонент, контракт которого проверен. Кодирование меняет представление, но не шифрует, не аутентифицирует, не очищает и не делает адрес безопасным.