Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Старо как мир - jsp + руссификация / 17 сообщений из 17, страница 1 из 1
31.03.2006, 11:55
    #33637185
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Старо как мир - jsp + руссификация
В силу возможностей приходится переделывать проект написанный на jsp. Ранее ответы клиенту и запросы клиенту проходили на ура, но в UTF-8, сейчас пробую win1251 получаю обломы. Вернее на сервер вместо русских букв уходят ??? Все это разумеется устанавливается в фильтре.
Строка, устанавливающая кодировку следущая:
request.setCharacterEncoding(ENCODING);
сейчас ENCODING = "Cp1251" раньше ENCODING = "UTF-8"
в jsp страницах
сейчас
<%@ page contentType="text/html; charset=cp1251" pageEncoding="windows-1251" %>
было
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>

фильтр срабатывает и срабатывает первым.
Где порылась собака ?

P.S. Tomcat 5.5.16, JDK 1.4.2_10
...
Рейтинг: 0 / 0
31.03.2006, 12:01
    #33637214
Старо как мир - jsp + руссификация
Правильно так:
Код: plaintext
1.
<%@ page contentType="text/html; charset=windows-1251" pageEncoding="Cp1251" %>

А чем не устраивает UTF-8?
...
Рейтинг: 0 / 0
31.03.2006, 12:03
    #33637224
Старо как мир - jsp + руссификация
Добавка:
pageEncoding - это кодировка, в которой написан исходный код страницы. Смотрю, раньше у вас все было в UTF-8. Если вы исходники не перекодировали, то правильный вариант:
Код: plaintext
1.
<%@ page contentType="text/html; charset=windows-1251" pageEncoding="UTF-8" %>
...
Рейтинг: 0 / 0
31.03.2006, 12:16
    #33637268
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Старо как мир - jsp + руссификация
про pageEncoding понятно. Исходники перекодировал, сейчас уже написал везде
<%@ page contentType="text/html;charset=Windows-1251" pageEncoding="Cp1251" %>
на самом деле комбинаций я перебрал больше. Сейчас стоит как написано здесь.
кстати играет роль W indows-1251 и w indows-1251 ?
Но это по моему неважно, т.к. все это ответ сервера.
request устанавливает запрос от клеинта.
Где ошибка?
...
Рейтинг: 0 / 0
31.03.2006, 12:48
    #33637410
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Старо как мир - jsp + руссификация
Не знаю может Гуру в java это и знают, но я (далеко не Гуру) удивился: после изменения метода GET у формы на метод POST все заработало!
Кто-нибудь может это прокомментировать?
...
Рейтинг: 0 / 0
31.03.2006, 14:05
    #33637669
v_777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Старо как мир - jsp + руссификация
Очень хочется, чтобы прокомментировали уважаемые специалисты. У меня похожая проблема , но в моем случае использование метода GET принципиально (запрос на сервер идет через AJAX).
По сути, после получения данных из формы нужно сделать их URL декодирование.
Как это сделать?
...
Рейтинг: 0 / 0
31.03.2006, 19:17
    #33638552
Старо как мир - jsp + руссификация
В протоколе HTTP для запросов не указывается кодировка, в которой передаются параметры. Отсюда все проблемы, и именно поэтому появился метод javax.servlet.ServletRequest#setCharacterEncoding. Браузер передает ( во всяком случае, должен ) параметры в той кодировке, в которой получена страница с формой.

В подтверждение сказанного предлагаю простой эксперимерт. Зайдите на http://ya.ru , наберите "привет" и нажмите Enter.
Броузер пошел по следующей ссылке:

http://www.yandex.ru/yandsearch?rpt=rad&text= %EF%F0%E8%E2%E5%F2

Теперь снова зайдите на http://ya.ru, выберите куодировку UTF-8 ( при этом страницу чуток покоробит ), наберите "привет" и нажмите Enter:

http://www.yandex.ru/yandsearch?rpt=rad&text= %D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82


Лично я указываю на всех страницах следующее:
Код: plaintext
1.
2.
3.
4.
5.
 1 ) <%@ page contentType="text/html; charset=windows-1251" %>
либо response.setContentType("text/html; charset=windows-1251");

 2 ) <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
это необходимо на случай, если пользователь сохранит страницу
Пока проблем с кодировкой не возникало.


Michael PonomarevНе знаю может Гуру в java это и знают, но я (далеко не Гуру) удивился: после изменения метода GET у формы на метод POST все заработало!
Кто-нибудь может это прокомментировать?
Может, элементарное кеширование? Какой браузер?

v_777Очень хочется, чтобы прокомментировали уважаемые специалисты. У меня похожая проблема , но в моем случае использование метода GET принципиально (запрос на сервер идет через AJAX).
По сути, после получения данных из формы нужно сделать их URL декодирование.
Как это сделать?
Не покажете код, которым вы формируете запрос?
...
Рейтинг: 0 / 0
31.03.2006, 20:04
    #33638611
М.Голованов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Старо как мир - jsp + руссификация
Michael Ponomarev<%@ page contentType="text/html; charset=cp1251" pageEncoding="windows-1251" %>

Браузер не знает кодировки cp1251. Он знает windows-1251. Поэтому вам бы лучше написать

Код: plaintext
<%@ page contentType="text/html; charset=windows-1251" pageEncoding="windows-1251" %>

http://java.sun.com/products/jsp/syntax/1.2/syntaxref1210.html
...
Рейтинг: 0 / 0
31.03.2006, 20:06
    #33638613
М.Голованов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Старо как мир - jsp + руссификация
Ненавижу регистрациюПравильно так:

Код: plaintext
1.
<%@ page contentType="text/html; charset=windows-1251" pageEncoding="Cp1251" %>


Так неправильно. Правильно, как я выше написал.
...
Рейтинг: 0 / 0
01.04.2006, 01:36
    #33638841
Старо как мир - jsp + руссификация
М.Голованов Ненавижу регистрациюПравильно так:

Код: plaintext
1.
<%@ page contentType="text/html; charset=windows-1251" pageEncoding="Cp1251" %>


Так неправильно. Правильно, как я выше написал.
Спасибо за Ваш комментарий, не знал о переменах java в отношении к кодировкам. Согласен, что Ваш вариант ближе к спецификациям...по крайней мере, начиная с 1.4.2. За 1.4.x (x<2) сказать не могу, но в 1.3.x (и ниже) точно поддерживается только Cp1251. Также в документации к 1.5 я нигде не увидел, что Cp1251 deprecated и т.п. Сказано, что каноническое имя windows-1251, а Cp1251 - alias.

Выходит, что мой вариант более универсальный - будет работать везде:)
...
Рейтинг: 0 / 0
01.04.2006, 12:36
    #33639005
М.Голованов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Старо как мир - jsp + руссификация
Ненавижу регистрациюСпасибо за Ваш комментарий, не знал о переменах java в отношении к кодировкам.

А никаких перемен особых и нет. JVM оперирует своими наименованиями кодировок, которые перечислены в документации на JVM. Баузеры оперируют наименованиями кодировок по регистру IANA. windows-1251 понимается и JVM, и браузерами, так как входит и в регистр IANA, и как каноническое наименование - в кодировки JVM. А вот Cp1251 входит только в кодировки JVM (как алиас) и браузерам неведом.
...
Рейтинг: 0 / 0
01.04.2006, 12:48
    #33639011
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Старо как мир - jsp + руссификация
авторСогласен, что Ваш вариант ближе к спецификациям...по крайней мере, начиная с 1.4.2. За 1.4.x (x<2) сказать не могу, но в 1.3.x (и ниже) точно поддерживается только Cp1251.

При чём тут спецификации и вообще Java. Поддержка UTF-8 в Java есть с самого начала. Cp1251 - давно или тоже с начала, не знаю. Так что есть возможность выбирать, что использовать в программе на Java. Правильно выбирать UTF-8, и неправильно windows-1251. Для вывода HTML страницы в IE, если бы он не поддерживал UTF-8, надо было бы перекодировать текст в Windows-1251, но он поддерживает, поэтому не надо. Нет ни малейшего смысла использовать Windows-1251, и я то и дело ругаю за него находящихся по соседству плохих программистов.
Как назвать кодировку "Cp1251" - так ли или "windows-1251" (названия набора символов в Java) - не повлияет на HTML. Поэтому не имеет отношения к директиве page contentType=... в которой надо использовать обозначения кодировок, понятные для IE.

авторВ силу возможностей приходится переделывать проект написанный на jsp. Ранее ответы клиенту и запросы клиенту проходили на ура, но в UTF-8, сейчас пробую win1251 получаю обломы.

Было сделано правильно. Какой тайный смысл переделывать неправильно - загадка. Впрочем, можете не раскрывать вашу тайну.
...
Рейтинг: 0 / 0
01.04.2006, 15:03
    #33639107
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Старо как мир - jsp + руссификация
Partisan M

авторКакой тайный смысл переделывать неправильно - загадка.

а размер получаемой страницы уже не является важным параметром?
...
Рейтинг: 0 / 0
02.04.2006, 00:12
    #33639384
y3u
y3u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Старо как мир - jsp + руссификация
funikovyuri Partisan M
а размер получаемой страницы уже не является важным параметром?

является, только не в случае с текстом... Если много информации на странице - сделайте несколько страниц, а заморачиваться с кодировками для этих целей - ИМХО фетишизм... Кстати, что Вы будете делать, если попросят оработать с китайскими иероглифами? :)
...
Рейтинг: 0 / 0
03.04.2006, 10:22
    #33640364
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Старо как мир - jsp + руссификация
Уважаемый Partisan M , объясните пожалуйста, а чем использование UTF-8 лучше? Я нехочу разжигать религиозную войну, тем более из-за кодировок, но все-же не понимаю столь категоричных высказываний. Если БД воспринимает 1251 и не надо писать alter session, если программа будет использоваться только внутри компании, если, насколько я понял, utf-8 была поставлена только из-за невозможности передать параметры (метод POST небыл опробован). Чем одна кодировка лучше другой? Разумеется мы не говорим о случае использования по назначению(китайский например) и, почему программист, использующий 1 кодировку - хороший, а другую плохой? А вопрос мой был лишь почему при изменении метода GET на метод POST все заработало?
...
Рейтинг: 0 / 0
03.04.2006, 12:49
    #33640878
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Старо как мир - jsp + руссификация
А вопрос мой был лишь почему при изменении метода GET на метод POST все заработало?

На сколько я помню, томкат любил так пошутить. Разные типы запросов(GET/POST), по разному декодировал. Проблема решалась настройками томката.
...
Рейтинг: 0 / 0
03.04.2006, 13:07
    #33640941
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Старо как мир - jsp + руссификация
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Старо как мир - jsp + руссификация / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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