Как обрабатывать специальные символы в значениях параметров? - PullRequest
1 голос
/ 21 марта 2012

У меня есть некоторые проблемы с моим Java-сервлетом , если он вызывается со специальными символами (такими как Æ, Ø og Å) в GET-параметрах: http://localhost:8080/WebService/MyService?test=Øst.

У меня есть этот код в моем doGet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println(request.getParameterValues("test")[0]);
}

Сообщения, напечатанные на консоли: Ã stst .

Веб-служба должна иметь возможность обрабатывать подобные вызовы. Как правильно закодировать значения параметров?

Ответы [ 3 ]

2 голосов
/ 21 марта 2012

Это необходимо настроить на уровне сервера. Непонятно, какой вы используете, поэтому приведу примеры только для Tomcat и Glassfish.

Tomcat : добавить атрибут URIEncoding к элементу <Connector> в /conf/server.xml:

<Connector ... URIEncoding="UTF-8">

Glassfish : добавьте <parameter-encoding> к /WEB-INF/glassfish-web.xml (или sun-web.xml для более старых версий):

<parameter-encoding default-charset="UTF-8" />

Смотри также:

1 голос
/ 21 марта 2012

Вы должны указывать процентное кодирование специальных символов (http://en.wikipedia.org/wiki/Percent-encoding). В приведенном выше примере "косая черта O" (Ø) имеет код UTF-8 0xd8, поэтому ваш URL будет правильно записан:

http://localhost:8080/WebService/MyService?test=%d8st.

Что должно привести к

Øst.

выводится на консоль из кода вашего сервлета выше.

0 голосов
/ 21 марта 2012

Вы можете попробовать следующий код перед запросом параметров:

request.setCharacterEncoding("utf-8");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...