URLCodec общих ресурсов Apache декодирует данные и заменяет символ вопросительным знаком (?)

Я столкнулся с одной проблемой при декодировании данных, таких как «1º», с использованием URLCodec из Apache commons. Он расшифровывается как «1?».

Есть ли решение этой проблемы?

Прежде чем я попытался использовать код ниже:

Строка decodedData = new URLCodec().decode(данные, "ISO-8859-1");

Я также пытался использовать приведенный ниже код. Но это не помогло.

Строка decodedData = new URLCodec().decode(данные, "UTF-8");


person D Vekaria    schedule 14.02.2013    source источник


Ответы (1)


Согласно документации, функция декодирования должна принимать стандартный URL-адрес и декодировать из него значения. Кодированное значение www-form-urlencoded может содержать только указанный набор значений ASCII.

Ваш вопрос предполагает, что вы отправляете значение URL с символами, которые не входят в допустимый диапазон для www-form-urlencoded.

Тогда ответ таков: я считаю, что вы пытаетесь декодировать значение, которое неправильно закодировано www-form-urlencoded, и это является источником вашей проблемы.

Значение, которое вы указали: 1º, которое представляет собой цифру 1, за которой следует «индикатор порядкового номера мужского рода» (при условии, что ничего не было искажено при редактировании этой записи StackOverflow). Порядковый показатель мужского рода имеет десятичное значение 186, что является шестнадцатеричным значением 00BA.

Предполагая, что вы начинаете с этого значения как незакодированные данные, тогда значение www-form-urlencoded для этой двухсимвольной последовательности будет зависеть от того, используете ли вы UTF-8 или ISO-8859-1. Вот закодированные версии каждого:

unencoded value:                           1º
www-form-urlencoded using ISO-8859-1 is:   1%BA
www-form-urlencoded using UTF-8 is:        1%C2%BA

Если вы возьмете закодированную форму и пропустите ее через декодер, вы должны получить обратно незакодированную форму. Однако нет определения того, что происходит, когда вы берете незакодированную версию и пытаетесь ее декодировать. Поскольку он не определен, фактическая реализация и фактический результат могут отличаться. Вероятно, это должно вызывать исключение как недопустимую кодировку, но это также не гарантируется.

person AgilePro    schedule 14.02.2013
comment
Спасибо за ответ. Этот персонаж работал раньше. Теперь это создает проблему при декодировании данных формы. - person D Vekaria; 14.02.2013