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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не могу разобраться с кодировкой. 
:(
    Опции темы
Aprol
Дата 27.3.2009, 05:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Уже не знаю что придумывать:
Не могу разобраться с кодировкой. Русские буквы либо вообще не сохраняются в бд либо криво . 
Использую struts 2.0, бд firebird. 
Сначала не отображались корректно Formbeans, я прикрутил фильтр 
Код

package filters;   
  
import java.io.IOException;   
import javax.servlet.*;   
  
public class UTF8Filter implements Filter   
{   
    public void destroy() {}   
  
    public void doFilter(ServletRequest request,   
        ServletResponse response, FilterChain chain)   
        throws IOException, ServletException   
    {   
        request.setCharacterEncoding("UTF8");   
        chain.doFilter(request, response);   
    }   
  
    public void init(FilterConfig filterConfig)   
        throws ServletException   
    {   
    }   
}  

 
beanы стали нормально отрабатывать. Зато теперь русский текст не пишется в базу... 
Так сохраняю в бд 

Код

org.firebirdsql.pool.FBWrappingDataSource dataSource =   
                   new org.firebirdsql.pool.FBWrappingDataSource();   
           dataSource.setDatabase(url);  // ���� � ��   
           dataSource.setDescription("");   
           dataSource.setType("TYPE4");   
           dataSource.setEncoding("UTF-8");   
           dataSource.setLoginTimeout(10);   
           Connection connection = null;   
           connection = dataSource.getConnection("sysdba", "masterkey");   
           // ������� ���������   
           System.out.println(taskBD.getName());   
           PreparedStatement pstmt = connection.prepareStatement("insert into tasks(name,package_name,task_key,id_user,id_category,definition,create_date)values(?,?,?,?,?,?,?)");    
  
           pstmt.setString(1, taskBD.getName());   
           pstmt.setString(2,taskBD.getPackage_name());   
           pstmt.setString(3,taskBD.getTask_key());   
           pstmt.setNull(4,1);   
           pstmt.setInt(5,taskBD.getId_category());   
           pstmt.setDate(7,taskBD.getCreate_date());   
           try {   
               ByteArrayOutputStream out = new ByteArrayOutputStream();   
               ObjectOutputStream outputStream = new ObjectOutputStream(out);   
               outputStream.writeObject(taskBD.getDefinition());   
               outputStream.close();   
               pstmt.setBytes(6, out.toByteArray());   
           } catch (IOException e) {   
  
               e.printStackTrace();   
  
           }   
  
  
           pstmt.executeUpdate();   
           pstmt.close();   
  
           return 0;   
       }   
       catch (SQLException e) {   
           e.printStackTrace();   
           return 0;   
       }   
  
   }  

 В таком виде будет ошибка: 
Цитата

org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544849. No message for code 335544849 found. 
at org.firebirdsql.jdbc.AbstractPreparedStatement.internalExecute(AbstractPreparedStatement.java:711) 
at org.firebirdsql.jdbc.AbstractPreparedStatement.executeUpdate(AbstractPreparedStatement.java:171) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:585) 
at org.firebirdsql.pool.PooledPreparedStatementHandler.invoke(PooledPreparedStatementHandler.java:172) 
at org.firebirdsql.pool.$Proxy3.executeUpdate(Unknown Source) 
at common.TaskManager.createTask(TaskManager.java:84) 
at actions.admin.tasks.AddTask.execute(AddTask.java:53) 
at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:5 
at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67) 
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51) 
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191) 
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305) 
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191) 
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283) 
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) 
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:18 
at filters.UTF8Filter.doFilter(UTF8Filter.java:15) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:18 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:10 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874) 
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) 
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:52 
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) 
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) 
at java.lang.Thread.run(Thread.java:595) 
at org.firebirdsql.gds.GDSException: No message for code 335544849 found. 
at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.readStatusVector(AbstractJavaGDSImpl.java:2104) 
at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.receiveResponse(AbstractJavaGDSImpl.java:2054) 
at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.iscDsqlExecute2(AbstractJavaGDSImpl.java:1146) 
at org.firebirdsql.gds.impl.GDSHelper.executeStatement(GDSHelper.java:222) 
at org.firebirdsql.jdbc.AbstractPreparedStatement.internalExecute(AbstractPreparedStatement.java:707) 
at org.firebirdsql.jdbc.AbstractPreparedStatement.executeUpdate(AbstractPreparedStatement.java:171) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:585) 
at org.firebirdsql.pool.PooledPreparedStatementHandler.invoke(PooledPreparedStatementHandler.java:172) 
at org.firebirdsql.pool.$Proxy3.executeUpdate(Unknown Source) 
at common.TaskManager.createTask(TaskManager.java:84) 
at actions.admin.tasks.AddTask.execute(AddTask.java:53) 
at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:5 
at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67) 
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51) 
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191) 
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305) 
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191) 
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283) 
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) 
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:18 
at filters.UTF8Filter.doFilter(UTF8Filter.java:15) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:18 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:10 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874) 
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) 
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:52 
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) 
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) 
at java.lang.Thread.run(Thread.java:595) 
________________________________________

Если проверять перед запросом значения в отладчике то они корректно отображаются.
System.out.print тоже корректно выводит  русские буквы
Я себе уже мозг сломал. Предоставляю такую возможность и вам)))

Добавлено @ 05:38
Нормально сохраняет в базу только в след. случае: 
Убираю фильтр. Строки приходят в Action в виде ???????(Это же cp1251?). 
Делаю такую бредовую операцию: 
Код

public static String deCode(String reqstring) { 
InputStream is = new StringBufferInputStream(reqstring); 
int b; 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

try { 
while ((b = is.read()) != -1) { 
baos.write(b); 

} catch (IOException e) { 
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 


// Перекодирование байтов в строку с использованием кодировки по умолчанию 

String s = null; 
try { 
s = baos.toString("cp1251"); 
} catch (UnsupportedEncodingException e) { 
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 

return s; 


_____________ 
строка например: ывфы перекодируется в ывфы и потом успешно сохраняется в БД. 
При этом beans перестает корректно работать, например поля при повторной загузке заполняет чем-то вот таким фывфыв 
ужс да и только((( 
короче получается выбирай:или нормально работающие beans или сохранение в БД

Это сообщение отредактировал(а) powerOn - 27.3.2009, 09:14
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0677 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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