Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> doGet и русские символы, Проблема с передачей русских символов 
:(
    Опции темы
_Flint_
Дата 13.2.2007, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 26.10.2006

Репутация: нет
Всего: нет



У меня есть JavaScript код на странице:
Код

 xmlHttpRequest.open("GET", "ajaxservlet?tp="+type+"&fam="+encodeURIComponent(fio.value), true);


При передаче русских символов, в параметре fam содержится строка следующего вида: %D0%A8%D0%B0%D0%BC%D1%

Сервлет получает этот запрос и обрабатывает его следующим методом:

Код

    public void doGet(HttpServletRequest request, 
                      HttpServletResponse response) throws ServletException, 
                                                           IOException {
        String type = request.getParameter("tp");
        String fio =  request.getParameter("fam");
        boolean valid = true;
        if (type.equals("fam"))
            valid = fio.toUpperCase().equals("ПУПУПКИН");


Однако я не могу таким образом сравнить строки, ибо в переменной fio содержатся кодированные символы. Каким образом я могу декодировать символы в удобочитаемую строку?

Это сообщение отредактировал(а) _Flint_ - 13.2.2007, 14:44
PM MAIL   Вверх
tux
Дата 13.2.2007, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



PM MAIL Skype GTalk Jabber YIM   Вверх
_Flint_
Дата 13.2.2007, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 26.10.2006

Репутация: нет
Всего: нет



Пробую
Код

String fio =  URLDecoder.decode(request.getParameter("fam"));

и
Код

String fio =  URLDecoder.decode(request.getParameter("fam", "UTF-8"));

и
Код

String fio =  URLDecoder.decode(request.getParameter("fam", "windows-1251"));


Результат в переменной fio не меняется. Как был равен "Шамрей", так и остается
PM MAIL   Вверх
tux
Дата 13.2.2007, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



А что за веб-контейнер?
PM MAIL Skype GTalk Jabber YIM   Вверх
_Flint_
Дата 13.2.2007, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 26.10.2006

Репутация: нет
Всего: нет



Если я правильно понял вопрос, то OC4J
PM MAIL   Вверх
tux
Дата 13.2.2007, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Так значит. Кодировка, в которой передаются параметры запроса, настраивается средствами веб-контейнеров. Как это делается в OC4J точно не скажу. Попробуй поискать файлик с именем orion-web.xml или похожим, относящийся к разворачиваемому приложению. К тэгу orion-web-app добавь атрибут default-charset с нужным названием кодировки. Правда на что это значение атрибута распространяется я не знаю, возможно и на кодировку, используемую в GET. В общем попробуй, если не получится, придется искать что-то другое.
PM MAIL Skype GTalk Jabber YIM   Вверх
_Flint_
Дата 13.2.2007, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 26.10.2006

Репутация: нет
Всего: нет



Самое забавное что конструкция
Код

        String ss = URLDecoder.decode(request.getQueryString(), "utf-8");
        System.out.println(ss);

В итоге показывает строку запроса с уже переведенным параметром "fam".
Однако конструкция
Код

String fio =  URLDecoder.decode(request.getParameter("fam"), "utf-8");

продолжает демонстрировать кракозябры.
Такое ощущение что придется парсить строку ss уже своими средствами а не getParameter, что не есть верное решение

Это сообщение отредактировал(а) _Flint_ - 13.2.2007, 15:39
PM MAIL   Вверх
_Flint_
Дата 13.2.2007, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 26.10.2006

Репутация: нет
Всего: нет



Помогла следующая конструкция:
Код

String fio =  new String(request.getParameter("fam").getBytes(), "utf-8");


Спасибо за помощь. Совет с URLDecoder навел на правильную мысль.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.2768 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.