![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| spbnvb |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 23.1.2008 Где: Украина Репутация: нет Всего: 0 |
И снова Jsp и русские буквы
Вопрос уже поднимался конечно, но может быть интересно будет прочитать мою версию. Проблема была такая. Читались неправильно русские тексты из параметров запроса. Если возвращать в чистом виде то, что было введено в поля форм, то получалось на выходе только знаки вопроса, то есть нераспознанные коды символов в текущей кодировке. У меня "Cp1251", она же windows-1251. Для сервлетов решил это с помощью фильтра, который выполнялся первым и выполнял команду "request.setCharacterEncoding ("Cp1251")". естественно, для форм типа enctype="multipart/form-data" это выкидывало исключение, поэтому пришлось заключить команду в блок try/catch. Для сервлетов метод прошел, но у jsp видать свои соображения (разная внутренняя реализация интерфейсов), и знаки вопроса никуда не делись. Причем вот интересно, у меня локально на винде всё отлично, проблема поднимается только, когда приложение переносится на линукс сервер. решил я эту проблему криво, написал функцию, через которую проходят все переменные, в которые читаются данные из формы. Когда то делал её для вебмайла, чтобы разрешать проблемы, когда неправильно составлены заголовки письма, но тут пригодилось.
Так вот всё бы хорошо, но у этой функции один недостаток. Если на сервере нормально распознаются параметры русские, тогда эта функция наоборот всё портит. То есть на "плохом" сервере позволяет решить проблему, а на "Хорошем" приходится переписывать код и комментировать её. Это очень неудобно, согласитесь. Так вот ВОПРОС НАКОНЕЦ ТО: Возможно ли, имея строку, определить, является ли она "правильной" строкой Cp1251, или всё таки это ISO, или в идеале вообще определить кодировку строки. Тогда вообще можно было бы написать класс, который вместо request.setCharacterEncoding("Cp1251"), которая там работает, а здесь уже нет, позволил бы решить эту проблему более глобально. Конечно есть ещё вариант, что я тут туфту понасочинял, а есть более нормальные способы решения проблемы. Тоже рад буду услышать) |
|||
|
||||
| necromancer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 317 Регистрация: 26.7.2006 Где: Москва Репутация: 6 Всего: 7 |
2 аспекта:
1. кодированием параметров занимается веб браузер. Если он не в курсе что у тебя за кодовая страница он будет кодировать в ISOчто то там для решения служит установка в JSP фалага <%@ page contentType="text/html;charset=UTF-8" language="java" %> а так же установка тэга: <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> в ствоем случае utf-8 заменить на cp1251(windows-1251) 2. наличие или понимание кодировки самим сервером. для этого он наверное должен поддерживтаь русскую кодировку (хотя помоему это не так важно как п.1) ну и PS =) разве сложно определить какой это запрос? multipart/form-data или нет и не городить try catch там где это не нужно? ;-) -------------------- С уважением, Виталий Смык ---------------------------------------------------------------------------------------------- SCJP, SCWCD, OCA http://dev.maryno.net/video/ |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |