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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Oracle+jsf+кириллица, Русские буквы записываются в бд как ??? 
:(
    Опции темы
trace
Дата 4.1.2006, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте!

Есть jsf-приложение, которое необходимо заставить корректно отображать кириллицу smile. В качестве бд используется Oracle. При записи в бд русские буквы записываются в базу как знаки вопроса. И отображаются потом как знаки вопроса, только перевернутые... Может, кто-то подскажет, из-за чего это происходит(возможно, сама java некорректно пишет? или проблема в бд?) и как с этим бороться.

Заранее спасибо.

PM MAIL   Вверх
LSD
Дата 4.1.2006, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15717
Регистрация: 24.3.2004
Где: Dublin

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



В базе какая кодировка стоит?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
trace
Дата 4.1.2006, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Честно говоря, не знаю smile. По идее та что по умолчанию... А как это посмотреть/поменять?
PM MAIL   Вверх
trace
Дата 4.1.2006, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В результате рыть в нете...
На сервере : NLS_CHARACTERSET CL8MSWIN1251
На клиенте в реестре
NLS_LANG = AMERICAN_AMERICA.CL8MSWIN1251\
И все равно та же фигня... smile
PM MAIL   Вверх
LSD
Дата 4.1.2006, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15717
Регистрация: 24.3.2004
Где: Dublin

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



Языковые параметры Oracle можно посмотреть:
Код
select * from v$nls_parameters


Какой тип драйвера используется, thin или oci8? Какие региональные установки стоят в ОС, конкретно меня интересует значение System.getProperty("file.encoding")?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
trace
Дата 5.1.2006, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Дело в том, что изначально оракл ставился, разумеется, стандартным образом(тогда о использовании в системе кириллицы речь не шла). Теперь такой вопрос возник, и в соответствии со статьей http://roug.ru/oraclub/tvormass/russ-ora.htm было проставлено значение NLS_LANG = AMERICAN_AMERICA.CL8MSWIN1251 на клиенте, и проапдейчено значение NLS_CHARACTERSET в props$, так что сейчас

Код

select * from props$ where name like 'NLS_CHARACTERSET'

Выдает
Код

    NAME    VALUE$    COMMENT$
1    NLS_CHARACTERSET    CL8MSWIN1251    Character set

В то же время в v$nls_parameters
Код

select * from v$nls_parameters

Лежит вот что:
Код

    PARAMETER    VALUE
1    NLS_LANGUAGE    AMERICAN
2    NLS_TERRITORY    AMERICA
3    NLS_CURRENCY    $
4    NLS_ISO_CURRENCY    AMERICA
5    NLS_NUMERIC_CHARACTERS    .,
6    NLS_CALENDAR    GREGORIAN
7    NLS_DATE_FORMAT    DD-MON-RR
8    NLS_DATE_LANGUAGE    AMERICAN
9    NLS_CHARACTERSET    WE8ISO8859P1
10    NLS_SORT    BINARY
11    NLS_TIME_FORMAT    HH.MI.SSXFF AM
12    NLS_TIMESTAMP_FORMAT    DD-MON-RR HH.MI.SSXFF AM
13    NLS_TIME_TZ_FORMAT    HH.MI.SSXFF AM TZR
14    NLS_TIMESTAMP_TZ_FORMAT    DD-MON-RR HH.MI.SSXFF AM TZR
15    NLS_DUAL_CURRENCY    $
16    NLS_NCHAR_CHARACTERSET    AL16UTF16
17    NLS_COMP    BINARY
18    NLS_LENGTH_SEMANTICS    BYTE
19    NLS_NCHAR_CONV_EXCP    FALSE

Т.е. получается, что здесь кодировка осталась WE8ISO8859P1 smile.
Драйвер используется thin. Локаль в системе русская. System.getProperty("file.encoding") выдает Cp1251.
PM MAIL   Вверх
LSD
Дата 6.1.2006, 04:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15717
Регистрация: 24.3.2004
Где: Dublin

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



Ты какую версию Oracle используешь, неужто 7-ку? Ты все делал по этой инструкции?

Если есть возможность попробуй использовать не varchar2, а nvarchar2.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
mayatnikov
Дата 9.9.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Думаю, проблема не в базе,а в JSF.
Проверьте вот такую страницу (отображает сама на себя)
Это выдержка из JSf-странички(форма ввода данных):
Код

      <body><h:form binding="#{backing_autogen.form1}" id="form1">
          <h:commandButton  value="Копировать поля в message" 
                            binding="#{backing_autogen.commandButton1}" 
                            id="commandButton1"
                           action="#{backing_autogen.commandButton1_action}"/>
          <h:inputText binding="#{backing_autogen.inputText1}" id="inputText1"/>
          <h:inputText binding="#{backing_autogen.inputText2}" id="inputText2"/>
          <h:messages/></h:form></body>


Это код обрабатывающий событие нажатия кнопки :
Код

    public String commandButton1_action() {
      FacesContext.getCurrentInstance().addMessage(null, new FacesMessage( "Это текст: "+
         (String)inputText1.getValue()+
         (String)inputText2.getValue()));
        return null;
    }

попробуйте сохранить в БД данные из простого сервлета предварительно вставить вот такой фрагмент:
Код

    public void doGet(HttpServletRequest request, HttpServletResponse response) .................... 
{
        request.setCharacterEncoding("Cp1251");
        response.setCharacterEncoding("Cp1251");
 ../* код обработки вх параметров и записи в БД */........................


А потом посмотрите содержимое Базы, думаю, там все будет хорошо.
Про кодировки базы данных и применения char varchar замечу, что это не важно, только не применять 7 битные кодировки и даже 7-ой Oracle все будет нормально.
Ну а с проблемой JSf (cм пример) сам еще не справился - мы друзья по несчастью.
для теста применял  JDEVELOPER V 10.1.3.1
буду следить за темой , ну и биться дальше.

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.0725 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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