Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Проблема с кодировкой


Автор: Therion 19.2.2007, 00:41
Для базы fr MySql ставлю ALTER DATABASE fr CHARACTER SET utf8 COLLATE utf8_general_ci;
После этого пишу такой код:
 
Код

           try {
                Class.forName("com.mysql.jdbc.Driver").newInstance();
                Connection conn = DriverManager.getConnection(
                        "jdbc:mysql://10.119.0.174/chatlandia?user=root&password=password&useUnicode=true&characterEncoding=cp1251");
                Statement stmt = conn.createStatement();
                ResultSet rs = stmt.executeQuery("SELECT message FROM msgs");
                while (rs.next()) {
                    out.println(rs.getString("message") + "<br>");
                }
                
            } catch (Exception ex) {
                System.out.println("SQLException: " + ex.getMessage());
            }


На странице получаю знаки вопроса вместо текста.
Как решить даную проблему.
Заранее благодарен.

Автор: tux 19.2.2007, 01:15
Ты бы сперва проблему локализовал. Она может возникать:
  • при неправильной конвертации в MySQL текста при изменении кодовой страницы базы данных когда ты выполняешь вот это: "ALTER DATABASE fr CHARACTER SET utf8 COLLATE utf8_general_ci". Тогда тебе совсем в другой раздел форума
  • при неправильной конвертации кириллицы при передаче от клиента к серверу, тогда надо что-то делать с клиентским подключением
  • при выводе данных на страницу, причем там куча вариантов где может возникать проблема. Причем "На странице получаю знаки вопроса вместо текста." для кириллицы и вообще любого текста - это две совершенно разные проблемы
Поэтому сделай следующее:
  • подключись к базе данных стандартным клиентом (не знаю что у него за клиенты, но какие-то должны быть) и посмотри что сейчас в таблицах. Если все в порядке переходим к следующему шагу. Если нет, то проблема видимо в конвертации базы самим MySQL. Тогда это лечится скорее всего только электричеством. Нужно спросить тогда в соответствующем разделе, может быть что-то предложат кроме замены СУБД
  • попробуй напечатать результат запроса просто в консоль. Если там все нормально, тогда дело в самом выводе на страницу и ждем подробностей. Если ненормально, тогда скорее всего проблема со строкой подключения к базе данных
И вопросы в следующий раз, пожалуйста, поконкретнее.

Автор: katala 25.2.2007, 16:16
я столкнулся с той же проблемой! причем вывожу все в консоль и там одни вопросы! 
смотрел клиентом базу там записи нормальные(все то что написано на русском отоброжается корректно). в связи с этим может кто нить поможеть и подскажет где и как проавильно настороить на работу с кирилицей!
вот настроийки подключения
Код

 <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate?characterEncoding=cp1251;</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">1</property>


Добавлено @ 16:30 
посмотрел свой проек . так вот в  настройках пропертей для велосити устанавливаю кодировку

Код

 props.put("input.encoding", "windows-1251");    
 props.put("output.encoding", "windows-1251");
 p.setProperty(Velocity.ENCODING_DEFAULT,"windows-1251");

ради интереса закомментировал эти строки. и вот что получилось что все что у меня написано на vm-страничках получилось иероглифами. я полез в настройки браузера и костивил  там вручную кодировку  window-1251
  и самое интересное что все стало отображаться правильно(и то что просто в страничке было записано и то что берется из базы отображается корректно)! значит получается что эти настройки неподходят для данных получаемых из базы а работают дтолько для текста вм-страничек!!!!  следовательно надо как то подправить настройки. посоветуйте может кто знает как исправить эту ошибку!!! 

Автор: nornad 25.2.2007, 18:00
Цитата(katala @  25.2.2007,  16:16 Найти цитируемый пост)
причем вывожу все в консоль и там одни вопросы! 

Консоль по умолчанию в винде (в винде же ты в консоль выводишь ;)) работает не в ср1251, а в ДОСовской кодировке (кажется, ср866). Как уже рекомендовал в одной из тем LSD, либо смени дефолтный шрифт консоли на Lucida Console (я не пробовал, но LSD верю ;)), либо перед выводом в консоль конвертируй строки.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)