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


Автор: MAMOHT 2.11.2007, 11:09
Привет. На старнице есть форма заказа ...
Код

<FORM METHOD=POST action="<%=base%>" >

<input type="Hidden" name="submit" value="true"/>
<input type="Hidden" name="action" value="order"/>


<center>

<table>
    
        
    <tr>
        <td><%= ordBean.getField("name", FIELD_NAME) %></td>
        <td><input type="Text" name="name" value="<%= ordBean.getField("name", FIELD_VALUE) %>"/></td>
    </tr>
    <tr>

.......



При сабмите - данные заносятся в бин:
Код

<jsp:setProperty name="ordBean" property="name" param="name"/>
        


Уже в самом бине - обрабатываються и заносятся в БД.
Когда текст английский - все нормально.... но когда русский - начинаються проблемы.
Все дело в том, что при отладке я пытался выводить данные , передаваемые в бин, в консоль еклипса - эти данные отображаються знаками вопроса. Потом бин пересылает эти же данные мне на мыло - то же самое - русские буквы заменяються знаками вопроса.

С другой стороны - я эти данные пихаю в БД, так вот - в БД они храняться так, как надо, кроме того на другой странице я просматриваю эти самые  записи из БД - тоже все нормально.

Влияет ли кодировка страницы на передаваемые данные, или только на отображаемые ??
В чем может быть проблема ?? В какую сторону копать ?? 
Помогите разобраться плз.

Спасибо.

Автор: valiantsin 2.11.2007, 11:34
Уважаемый 
MAMOHT, с Вашим вопросом поможет Вам же разобраться - вот эта интересная статья:
http://www.jug.ru/servlets/index?page=rus#jsp
если Вы сами не поймете - напишите еще раз до чего Вы не докопались, на чем остановились - просто очень сложно делать некоторые выводы - слишком много различных вариантов smile Вполне вероятно, что и там ответа правильного не будетsmile.

Автор: Се ля ви 2.11.2007, 12:26
А изначальный документ, с формой - в какой коировке? Поставь utf-8.

Автор: MAMOHT 2.11.2007, 18:18
хм_

Почитал я статью... в принципе - ничего нового  =((

1) Кодировка jsp документа с формой - <%@page contentType="text/html;charset=UTF-8" %>

 не помогло -(
2) При отправке сообщения :
пробывал прописать так, как это описывалось в статье - 

message.setText("Текст тестового письма",ENCODING);

Но еклипс пишет ошибку - 

The method setText(String) in the type Part is not applicable for the arguments (String, String)

С другой стороны в MySQL же данные норм заносятся...

Код

String sql="insert into orders values('"+
     name+"','"+surname+"','"+email+"','"+icq+"','"+phone+
     "','"+description+"',NOW());";

     System.out.println(sql);


В базе все переменные сохраняються нормально, а при систем.оут - в консоли иероглифы...

Автор: MAMOHT 3.11.2007, 14:10
Лазил в инете - не у одного меня такая проблема.
Люди говорят, что можно использовать URLDecoder, зашитый в метод setProperty(...) bean-компонента.
Так вот:
1) Неужели нету другого способа с этим бороться, кроме как в каждый сеттер писать дополнительный код ??

2) Собственно а как пользоваться этим самым URLDecoder ??

Спасибо.

Автор: Kangaroo 3.11.2007, 17:44
Мы тоже на работе сталкивались с такой проблемой, расскажу решение может поможет.
Используем Spring и Tomcat.
В web.xml поставили фильтр:
Код

<filter>
  <filter-name>charsetFilter</filter-name> 
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
- <init-param>
  <param-name>encoding</param-name> 
  <param-value>UTF-8</param-value> 
  </init-param>
  </filter>
- <filter-mapping>
  <filter-name>charsetFilter</filter-name> 
  <url-pattern>/*</url-pattern> 
  </filter-mapping>

+ дописали в server.xml Tomcat'a:
Код

<Connector port="8080" ..... URIEncoding="UTF-8" />

+ на страничке прописано.
Вроде ничего не забыл.

Автор: MAMOHT 3.11.2007, 23:02
Спасибо большое за ответ. 
Проблема пока не решена т.к. ничего, кроме названия , о спринге не знаю =))

Сегодня же начну разбираться =)))

Но все ровно спасибо.

Автор: Kangaroo 3.11.2007, 23:18
Цитата(MAMOHT @  3.11.2007,  22:02 Найти цитируемый пост)
Проблема пока не решена т.к. ничего, кроме названия , о спринге не знаю =))

Фильтр можно и ручками сделать, я думаю он просто каждому request'y и response'y ставит соответствующую кодировку. Вот и все.

В соседней теме была такая же проблема, решилась с помощью установки Tomcat'y кодировки в server.xml как я написал.

Автор: MAMOHT 4.11.2007, 13:45
Кодировку томката я ставил...
Вобщем сделал все как ты писал (кроме фильтра), но мне не помогло...
Буду думать шо  как... спасибо большое....

Автор: jsa 4.11.2007, 15:08
MAMOHT, джава не регламентирует кодировку при передаче данных постом, поэтому все данные передаются в ISO-8859, если надо пробразовать в нормальную кодировку то примерно так
Код

 String normalizeString = new String(request.getParameter('...').getBytes('ISO-8859-1'),'UTF-8');

писал по памяти, могут быть ошибки, но в целом идея надеюсь понятна

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