изменение кодировки на основе входного параметра в сервлете

Я настроил Kannel для отправки сообщений моему сервлету. URL-адрес выглядит следующим образом:

http://10.10.10.10/income/Submit?from=%p&to=%P&content=%a&encoding=%C

Проблема в том, что encoding равно UTF-8 для сообщений на английском языке и UTF-16BE для сообщений на персидском языке. Мой сервлет выглядит так:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");

    String to = request.getParameter("to");
    String from = request.getParameter("from");
    String content = request.getParameter("content");

    /* process message here */
}

С этим кодом я не могу получить персидские сообщения. (Они конвертируются в ASCII). Когда я конвертирую request.setCharacterEncoding("UTF-8"); в request.setCharacterEncoding("UTF-16BE");, я получаю null для всех переменных. Может ли кто-нибудь помочь мне, как преобразовать to, from, content на основе поля encoding? Я использую Glassfish 3.1.2.2 в качестве контейнера.


person Majid Azimi    schedule 05.08.2013    source источник
comment
Фактически, вы должны убедиться, что UTF-8 существует в ТРЕХ местах! Убедитесь, что все они есть. Вот хорошее объяснение: stackoverflow.com/a/10971742/2542027   -  person Multithreader    schedule 05.08.2013
comment
В Glassfish request.setCharacterEncoding() совершенно не влияет на строки запроса GET. Это влияет только на тело запроса POST. Насколько мне известно, JBoss AS ›=7 — единственный сервер, который позволяет настроить через его standalone.xml использование той же кодировки тела запроса POST для декодирования строки запроса GET. Но на всех остальных вы должны явно настроить его отдельно. Поэтому ваш вопрос, в котором вы подразумеваете, что изменение кодировки тела запроса POST влияет на декодирование строки запроса GET, несколько подозрительный. Вы действительно сделали правильные наблюдения?   -  person BalusC    schedule 05.08.2013


Ответы (1)


В Kannel вы можете установить mo-recode на 1 в группе smsbox. Это укажет Kannel автоматически перекодировать текстовые сообщения MO в кодировку UTF-8 перед отправкой на ваш HTTP-сервис.

Просто убедитесь, что ваш Kannel поддерживает iconv.

person michael.bochkaryov    schedule 05.08.2013