Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Томкэт, данные из оракла и кирилица / 6 сообщений из 6, страница 1 из 1
02.03.2007, 13:06:39
    #34366465
DIMA11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Томкэт, данные из оракла и кирилица
Помогите!!
Страничка, формируемая сервлетом, заполняется данными из оракла и при ее просмотре под томкэтом он всю кирилицу показывает вопросами. Нашел кучу подобных вопросов, но так и не нашел работоспособного в моем случае ответа...
В сервлете при заполнении странички ставлю

Код: plaintext
1.
2.
3.
PrintWriter out = response.getWriter();

        response.setContentType("text/html;charset=Windows-1251");
        response.setCharacterEncoding("Cp1251"); // это уже на всякий случай, для пробы

пробовал и юникод (данные в оракле в юникоде)

Код: plaintext
response.setContentType("text/html;charset=UTF-8");

и все равно знаки вопроса... менял кодировки просмотра в браузере - не помогает...

При формировании отчета из оракла (с помощью Jasper Reports, сервлет запускает нужные классы) в виде htm странички, сохранения ее на диск, и просмотра под томкатом все те же знаки вопроса вместо кирилицы. Зато при открытии этой странички без томкэта, просто кликнув по ней, кирилицу показывает нормально!! Эксплорер в этом случае сам ставит кодировку просмотра странички UTF-8.
Что делать?
...
Рейтинг: 0 / 0
02.03.2007, 14:08:12
    #34366746
Mainframe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Томкэт, данные из оракла и кирилица
Попробуйте строку перед выводом переконвертировать с windows-1251. Т.е. на базе этой строки создать новую с кодировкой windows-1251 и ее в response
...
Рейтинг: 0 / 0
02.03.2007, 14:55:34
    #34367012
DIMA11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Томкэт, данные из оракла и кирилица
Понял в чем эта проблема, но появилась новая!
Передаю вызов из сервлета на созданную JasperReport страницу так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
HttpClient httpClient =  new  HttpClient();

                PostMethod postMethod =  new  PostMethod("http://localhost:8081/test.htm");
                httpClient.executeMethod(postMethod);

                response.setContentType("text/html;charset=UTF-8");
                java.io.PrintWriter out = response.getWriter( );

                //A "200 OK" HTTP Status Code
                 if  (postMethod.getStatusCode( ) == HttpStatus.SC_OK)
                {
                    out.println(postMethod.getResponseBodyAsString( ));
                }
                 else 
                {
                    out.println("The POST action raised an error: " + postMethod.getStatusLine( ));
                }
                //release the connection used by the method
                postMethod.releaseConnection( );

Вообще то мне совсем не обязательно отправлять именно пост запрос, хватит и гет. Посоветуйте как это сделать попроще, а то пост как то сложновато получается, тем более что параметры никакие не нужны...
Так вот в чем проблема - этот пост запрос почему-то уходит не в юникоде, и, соответственно, все и получается иероглифами. Т.е. если просто в браузере набрать http://localhost:8081/test.htm то вся кирилица показывается нормально!!! Помогло добавление этой строки
Код: plaintext
response.setCharacterEncoding(encoding);
в классе фильтра. теперь все показывает нормально, но мне кажется что это не очень правильное решение. Помогите советом, пожалуйста!!
...
Рейтинг: 0 / 0
02.03.2007, 15:45:21
    #34367256
DIMA11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Томкэт, данные из оракла и кирилица
Раз пост метод мне не нужен - заменил:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
HttpClient httpClient =  new  HttpClient();

                PostMethod postMethod =  new  PostMethod("http://localhost:8081/test.htm");
                httpClient.executeMethod(postMethod);

                response.setContentType("text/html;charset=UTF-8");
                java.io.PrintWriter out = response.getWriter( );

                //A "200 OK" HTTP Status Code
                 if  (postMethod.getStatusCode( ) == HttpStatus.SC_OK)
                {
                    out.println(postMethod.getResponseBodyAsString( ));
                }
                 else 
                {
                    out.println("The POST action raised an error: " + postMethod.getStatusLine( ));
                }
                //release the connection used by the method
                postMethod.releaseConnection( );

на:

RequestDispatcher dispatcher;
dispatcher = request.getRequestDispatcher("test.htm");
dispatcher.forward(request, response);
...
Рейтинг: 0 / 0
13.03.2007, 17:45:46
    #34388174
Faqq
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Томкэт, данные из оракла и кирилица
Прдон за оффтоп.
Может пригодится:

Доступ к базам данных из Java-программ и проблемы русификации
http://www.citforum.ru/internet/articles/java_db.shtml

и вырезка из http://www.javaportal.ru/ :

Несмотря на то, что сервлеты используют HTTP-протокол, им нет необходимости перезагружать процесс при каждом новом запросе и это также повышает их быстродействие. Однако при использовании сервлетов возникает проблема использования кириллических символов. Стандартный путь прохождения данных тут не действует, потому что Web-сервер при старте запускает так называемый Java-handler, которому передает на выполнение все Java-сервлеты и обменивается вводом-выводом именно с ним через специальную библиотеку классов. Для получения кириллических строк в браузере от Web-сервера, исполняющего сервлеты, необходимо использовать вместо стандартных примитивов ввода/вывода некоторые специальные методы для работы со строками, например:


// Определение необходимого кодификатора
// в зависимости от используемого типа кодировки
String dos = new String(“Cp866”);
String win = new String(“Cp1251”);
String iso = new String(“8859_5”);
String im = new String(“Кириллический текст”);
.......................................................
out.println(“”);
//out.write(im.getBytes(dos));
out.write(im1.getBytes(win));
//out.write(im2.getBytes(iso));
out.println(“”);
Однако, эффективная функция Java - getBytes() не действует при извлечении данных при помощи сервлетов из баз данных. Необходимо применить метод, который уже был использован при работе с базами данных при помощи интерфейса JDBC. Кроме того, файл font.properties в каталоге $JDK_HOME/lib или в специальном каталоге браузера должен быть соответствущим образом настроен. Во многих пакетах Java имеются образцы файла font.properties.ru, который можно взять в качестве основы. При работе с уже русифицированным Web-сервером, например, русской версией Apache, происходит автоматическая перекодировка данных, поступающих из базы данных от сервлета. Сервлет не накладывает никаких ограничений на использование интерфейсов с базой данных. Можно использовать обыкновенный JDBC-ODBC, или специфические драйверы, ориентированные на конкретные SQL-серверы и базы данных. Кроме того, необходимо также на Панели управления в разделе Администратор внести следующие изменения в источники данных (ODBC): в разделе Пользовательский DSN необходимо Добавить MicrosoftAccessDriver, затем необходимо выбрать базу данных и добавить ее к пользовательскому DSN.
...
Рейтинг: 0 / 0
13.03.2007, 20:17:37
    #34388572
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Томкэт, данные из оракла и кирилица
to Faqq

надо было создать свою тему. Приведённый же текст нельзя одобрить. Во-первых, почему русские буквы называются "кириллическими символами"? Автору текста что слово "руусский" не нравится? Зачем тогда цитировать это существо. Во-вторых, содержание текста не соответствует действительности. Никаких проблем при выводе русских букв в сервлете нет. Во-первых, надо указать кодировку (это нужно для IE): response.setContentType(...)
Во-вторых, надо обеспечить соответствие текста этой кодировке (текст может быть в Windows-1251, а хочешь выводить в UTF-8 или наоборот). Тогда надо преобразовывать. Как: ознакомиться с классом java.nio.Charset (требует JDK 1.4 и новее). В примере показан устаревший способ для JDK 1.3. Рекомендую и хранить, и выводить текст только в UTF-8, тогда и проблем не будет.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Томкэт, данные из оракла и кирилица / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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