Давно заметил, что просто так кириллица из веб формы на сервер не
попадает - приходится всякий раз изобретать что-то, что бы конвертило
кракозяблики вида %D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9 в понятное
слово - русский.
Для форм, отсылаемых методом POST, все решается довольно просто:
браузеры обычно конвертируют символы при отсылке в кодировку, указанную в
Сontent-type метатэге. Затем, чтобы правильно принять закодированные
символы, можно использовать фильтр, который навешивается на нужный
сервлет (или еще проще, на все сервлеты), и который устанавливает
кодировку запроса и ответа, например, в utf-8.
Однако, это работает хорошо только для POST-форм, а вот GET и линки
приходится дорабатывать напильником. Проблема в том, что параметры
запроса (query string) - то, что идет после '?' в урле, Tomcat'ом
обрабатываются отдельно, и кодировка используется ISO-…., которая, естественно, не понимает русских букв…
Решение простое - в коннекторе Tomcat надо
добавить атрибут - useBodyEncodingForURI=«true». Или же URIEncoding,
если вы уверены, в какой кодировке закодированы параметры. Я выбрал
первый вариант + фильтр, и получил счастье. При установке
useBodyEncodingForURI будет использована кодировка, которая используется
при раскодировании тела запроса - перед запросом первого параметра
нужно установить кодировку запроса -
request.setCharacterEncoding(«utf-8») - например.
Вот так выглядит подхаченый коннектор (файл server.xml):
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" useBodyEncodingForURI="true"/>Другой источник, рекомендует исправлять его несколько иначе:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
Комментариев нет:
Отправить комментарий