powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / русские буквы в URL и сервлет
14 сообщений из 14, страница 1 из 1
русские буквы в URL и сервлет
    #34085077
ламиерро
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Параметры запроса передаются через GET

Когда в качестве параметра присутствует слово в символах кириллицы, методом req.getParameter в сервлете получаю строку вопросительных знаков.

Как получить параметр в оригинале ?

Пробовал в начале goGet ставить req.setChsracterEncoding("Cp1251") , не помогло.

При этом при отправке запроса из IE строка в самом браузере (в строке адреса) не трансформируется. В Firefox кириллические символы после отправки запроса приобретают вид %XX , где XX символы от 0 до F .
На стороне сервлета ситуация одинакова независимо от браузера.

Должно быть, хорошо известная проблема и решение.

Благодарю за ответ.
...
Рейтинг: 0 / 0
русские буквы в URL и сервлет
    #34085155
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В параметрах URL (адресной строке браузера) символы кирилицы недопустимы.
...
Рейтинг: 0 / 0
русские буквы в URL и сервлет
    #34086420
ламиерро
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KachalovВ параметрах URL (адресной строке браузера) символы кирилицы недопустимы.

Позвольте не согласиться.

Ввожу в адресную строку IE запрос

http://www.google.com/search?num=50&hl=ru&ie=WIN&q=лопата&lr=

и успешно получаю результаты поиска по заданному слову.

Строка адреса в IE при этом не трансформируется.
В Firefox после открытия страницы слово "лопата" в адресной строке меняется на %EB%EE%EF%E0%F2%E0
...
Рейтинг: 0 / 0
русские буквы в URL и сервлет
    #34086460
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
конечно в IE это будет работать. IE не следует никаким спецификациям. если строку набрать в опере, то она будет преобразована в
http://www.google.com/search?num=50&hl=ru&ie=WIN&q=%D0%BB%D0%BE%D0%BF%D0%B0%D1%82%D0%B0&lr=
...
Рейтинг: 0 / 0
русские буквы в URL и сервлет
    #34086518
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага! А я в адресной строке проводника в винде ввожу слово "диван" и MSNSearch находит мне сайты про диваны.
Писание кирилицы в параметрах URL это ошибка в соответствии с протоколом HTTP. Цитата из RFC 1738 :
Код: plaintext
1.
URLs are written only with the graphic printable characters of the US-ASCII coded character set.

Используя символы кирилицы в URL Вы нарушаете правила. Иногда как в случае с гугл и микрософт это проходит, все таки там не дураки работают, иногда, как в Вашем случае, нет. Зачем лезть на рожон и сознательно нарушать правила?
...
Рейтинг: 0 / 0
русские буквы в URL и сервлет
    #34086837
ламиерро
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё было бы понятно, если бы при замене русского слова на
%EB%EE%EF%E0%F2%E0 в строке URL в сервлет пролезало бы это самое слово. Но там к сожалению всё равно вопросительные знаки.

Если же задать англоязычное слово, в сервлет оно поступает без изменений. Почему так ?
...
Рейтинг: 0 / 0
русские буквы в URL и сервлет
    #34086903
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ламиерроНо там к сожалению всё равно вопросительные знаки
- какой web-сервер, какой версии? Если Tomcat 5.5.x смотри настройку useBodyEncodingForURI
...
Рейтинг: 0 / 0
русские буквы в URL и сервлет
    #34086944
fjord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
настройка Tomcat
В файл server.xml следует добавить следующие строки:
useBodyEncodingForURI="true"
URIEncoding="UTF-8"
При отсутствии этого параметра все русские символы, приходящие в GET-запросе будут заменяться на символы « ? ».
Код: plaintext
1.
2.
3.
4.
5.
6.
   <Connector port="8080" 
    maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" redirectPort="8443" acceptCount="100"
    debug="0" connectionTimeout="20000" 
    disableUploadTimeout="true"  
    useBodyEncodingForURI="true" 
    URIEncoding="UTF-8"/>
В файле web.xml необходимо настроить jsp-сервлет:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 <init-param>
    <param-name>javaEncoding</param-name>
    <param-value>Windows- 1251 </param-value>
    </init-param>        
    <init-param>
    <param-name>trimSpaces</param-name>
    <param-value>true</param-value>
    </init-param>
    <init-param>
    <param-name>development</param-name>
    <param-value>true</param-value>
    </init-param> 
...
Рейтинг: 0 / 0
русские буквы в URL и сервлет
    #34087060
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2fjord
достаточно useBodyEncodingForURI="true" и request.setChsracterEncoding("кодировка")
...
Рейтинг: 0 / 0
русские буквы в URL и сервлет
    #34087074
ламиерро
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov , fjord

Сделал, перезапустил - пока безрезультатно. Вс равно вопросительные знаки.

Обратил внимание на следующую вещь.

При запросе к Google, например из Firefox, в строке браузера слово "лопата"
трансформируется в %D0%BB%D0%BE%D0%BF%D0%B0%D1%82%D0%B0
(т.е. по 2 байта на символ, очевидно Unicode)

При запросе к моему сервису то же слово преобразуется в
%EB%EE%EF%E0%F2%E0
(т.е. по 1 байту на символ)
...
Рейтинг: 0 / 0
русские буквы в URL и сервлет
    #34087099
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ламиерро
Сделал, перезапустил - пока безрезультатно. Вс равно вопросительные знаки.

- разберитесь в какой кодировке "на самом деле" отправляютя данные. Посмотрите в браузере опцию "вид"->"кодировка", что там выбрано? Лучше явно в коде страницы указывать кодировку, а если страница динамическая указать кодировку ответа: response.setContentType("text/html; charset=windows-1251");
...
Рейтинг: 0 / 0
русские буквы в URL и сервлет
    #34087262
ламиерро
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov
- разберитесь в какой кодировке "на самом деле" отправляютя данные. Посмотрите в браузере опцию "вид"->"кодировка", что там выбрано? Лучше явно в коде страницы указывать кодировку, а если страница динамическая указать кодировку ответа: response.setContentType("text/html; charset=windows-1251");

Страницы для отправки запроса не существует, это не POST а GET, есть только URL
...
Рейтинг: 0 / 0
русские буквы в URL и сервлет
    #34087303
ламиерро
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде осилил, прошло.

Слово в URL должно кодироваться по 2 байта на символ, т.е. для компоновки правильного запроса сейчас использую такой кривой путь :

- в Firefox открываю поиск по этому слову в Google ; при этом набираю слово русскими буквами прямо в строке адреса.

- Google выполняет поиск и преобразует адрес в строке браузера в Unicode.

- Copy-Paste слова которое было в кириллице из полученного URL в URL моего сервиса , и вставляю полученный URL в строку адреса браузера.

И вот только тогда в сервлете получаем русские буквы.

Благодарю всех за помощь.
...
Рейтинг: 0 / 0
русские буквы в URL и сервлет
    #34087318
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ламиерродля компоновки правильного запроса сейчас использую такой кривой путь :
Вообще-то есть классы java.net.URLEncoder, java.net.URLDecoder.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / русские буквы в URL и сервлет
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]