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


Автор: katala 5.5.2006, 13:27
народ помогите!!
какое заначение надо указать в парамтре 
charset=????
что бы IE воспринимал русский шрифт
я пробовал и сp1251 b Windows-1251 b UTF-8.  но результато это не дало. и еще вопрос может я не в том месте устанавливаю
я пишу это в html странице

Код

<head>
        <meta http-equiv="Content-Type" content="text/html; charset=Cp1251">
        <LINK href="templates/template.css" type=text/css rel=stylesheet>
    </head>
 

Автор: carper 5.5.2006, 13:36
Исходя из того, что это форум по J2EE, предположу, что

<%@page pageEncoding="windows-1251"%>

 

Автор: katala 5.5.2006, 13:38
нет  использую vm-странички а не jsp  

Автор: powerOn 5.5.2006, 13:39
еще можно cp866 попробовать. И не забыть в меню Вид -> Кодировка проверить обстановку... 

Автор: katala 5.5.2006, 13:48
MoonCat, и просить всех пользователей менять в браузерах кодировку smile. надо что бы кодировка браузера игнорировалась. там типа стоит авто выбор и пременялась та кодировка которую я установил  

Автор: Bulat 5.5.2006, 13:55
А можно по подробнее, сам нередко сталкивался с проблемой кодировки, вполне возможно еще где-то ее нужно указать, не только как параметр vm-страницы 

Автор: powerOn 5.5.2006, 13:59
Цитата

MoonCat, и просить всех пользователей менять в браузерах кодировку smile


Если браузер автоматически не в состоянии распознать кодировку, по поменять её руками - совершенно нормальное явление. ... и вообще зачем тогда возможность менять кодировку руками имеется браузеров?

А всетаки, если поменять кодировку в настройках браузера работать будет (ну ради интереса) ?
 

Автор: tux 6.5.2006, 02:24
http://forum.vingrad.ru/index.php?showtopic=83132 

Автор: katala 6.5.2006, 16:29
если я добавляю в код 
p.put("input.encoding", "windows-1251");    
        p.put("output.encoding", "windows-1251");
у меня наооборот появляютя одни ???????? а до этого у меня были  просто иероглифы. мне это не помогло. какие есть еще идеи???? 

Автор: tux 6.5.2006, 17:41
Цитата(katala @  6.5.2006,  21:29 Найти цитируемый пост)
если я добавляю в код 
p.put("input.encoding", "windows-1251");    
        p.put("output.encoding", "windows-1251");
у меня наооборот появляютя одни ???????? а до этого у меня были  просто иероглифы. мне это не помогло. какие есть еще идеи????  

Чудеса какие-то. Напиши как ты обрабатываешь шаблоны Velocity и пример самого шаблона. 

Автор: katala 6.5.2006, 18:05
Код

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
        <meta http-equiv="pragma" content="no-cache" />    
        <meta http-equiv="expires" content="Wed, 26 Feb 1997 08:21:57 GMT" />    
        <title>Menu example</title>
    </head>
    
    <body>
        #parse("menu.vm")
    </body>

</html>

Код

public class Index extends AbstractVelocityAction {
    
    public ActionForward processActionLogic(VelocityContext context, ActionMapping mapping, ActionForm form, HttpServletRequest request) throws Exception {
        
        template = Velocity.getTemplate("main.vm");    
        return mapping.findForward("/index");
        
    }
}
 

Автор: katala 6.5.2006, 18:31
причем вот какая закономерность если я не ставлю  в настройках
p.put("input.encoding", "windows-1251");    
        p.put("output.encoding", "windows-1251");
то текст который я пишу в вм-ка появляется ввиде иероглифов(лезу в браузер меняю на windows-1251)  и он становиться нормальным а если ставлю то он становиться вопросами. А текстк который я записывуаю в классе как context.put() совсем ведет себя по другому  в вм-ке он появляется как вопросы и при этом если я меняю кодировку в браузере никак не реагирует причем  и 
p.put("input.encoding", "windows-1251");    
        p.put("output.encoding", "windows-1251"); 
не помогает. пробовал как в опере так и IE. совсем не могу понять где проблема??? 

Автор: tux 7.5.2006, 08:01
А вот это делается?
Код

response.setContentType("text/html; charset=windows-1251");
 

Автор: katala 7.5.2006, 14:44
все!!! заработало!! спасибо!!! как только смогу сразу поставлю пару плюсов(уже задолжал)! еще раз сенкс!!! 

Автор: katala 7.5.2006, 15:49
извиняюсь что появилась еще одна проблема в кодировкой. если с тем что записана в вм-ках и через context.put() проблем не возникает(теперь не возникает) то теперь появилась проблема с возврашаемыми значениями полей. я пробовал ставить 
 request.setCharacterEncoding("windows-1251"); но это не помогло остаються ???? вместо русского текста.  tux помоги!!!! 

Автор: tux 7.5.2006, 16:48
Тема обсуждалась многократно. Кодировка должна выставляться до первого обращения в объекту класса HttpServletRequest. Если используется какой-либо фреймворк (Struts, например), то кодировку ты гарантированно устанавливаешь уже после первого обращения. Поэтому делать это надо в фильтре. Рецепт здесь - http://forum.vingrad.ru/index.php?showtopic=66203&view=findpost&p=530693.  

Автор: katala 7.5.2006, 18:47
все и с этой проблемой справились(общими усилиями). теперь еще два вороса
почему в web.xml после добавления 
 
Код

<filter>    
        <filter-name>SelectLanguageFilter</filter-name>    
        <filter-class>filter.SelectLanguageFilter</filter-class>    
      <init-param>    
        <param-name>requestEncoding</param-name>    
        <param-value>windows-1251</param-value>    
      </init-param>    
    </filter>    
    <filter-mapping>    
        <filter-name>SelectLanguageFilter</filter-name>    
        <url-pattern>/*</url-pattern>    
    </filter-mapping>
 напротив строки </web-app> повляется знак ошибки????
и второе как теперь в базу правильно сохранить. вообще для работы с базой изполью технология hibernate.  все настройки в файле hibernate-config.xml

Код

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC  "-//Hibernate/Hibernate Configuration DTD//EN"  "hibernate-configuration-2.0.dtd" >

<hibernate-configuration>


    <session-factory name="java:comp/env/hibernate/SessionFactory">

        <property name="hibernate.connection.datasource">java:comp/env/jdbc/forum</property>

        <property name="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.use_outer_join">true</property>

        <!-- <property name="hibernate.transaction.factory_class">net.sf.hibernate.transaction.JBossTransactionManagerLookup</property>-->

        <property name="hibernate.jta.UserTransaction"> java:comp/UserTransaction</property>

        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate?characterEncoding=UTF-8</property>
        <property name="hibernate.connection.username">lex</property>
        <property name="hibernate.connection.password"></property>
        <property name="hibernate.connection.provider_class">net.sf.hibernate.connection.DriverManagerConnectionProvider</property>

     <property name="c3p0.max_size">1000</property>
        <property name="c3p0.min_size">2</property>
        <property name="c3p0.timeout">5000</property>
        <property name="c3p0.max_statements">100</property>
        <property name="c3p0.validate">true</property>

        <property name="dbcp.maxActive">1000</property>
        <property name="dbcp.maxIdle">100</property>
        <property name="dbcp.maxWait">5000</property>
        <property name="dbcp.whenExhaustedAction">0</property>
        <property name="dbcp.testOnBorrow">false</property>
        <property name="dbcp.testOnReturn">false</property>
        <property name="dbcp.ps.maxActive">100</property>
        <property name="dbcp.ps.maxIdle">100</property>
        <property name="dbcp.ps.maxWait">100</property>
        <property name="dbcp.ps.whenExhaustedAction">0</property>

        <property name="query.substitutions">true=1, false=0</property>

        <!-- mapping files -->
        <mapping resource="hibernate/mapping/Client.hbm.xml"/>
        

    </session-factory>

</hibernate-configuration>


пробовал добавить запись <property name="characterEncoding">windows-1251</property>
но не помогло . подскажи что надо добавить и что изменить 

Автор: batigoal 7.5.2006, 21:46
Цитата(katala @  7.5.2006,  19:47 Найти цитируемый пост)
почему в web.xml ... напротив строки </web-app> повляется знак ошибки????

Посмотри вот этот топик: http://forum.vingrad.ru/index.php?showtopic=94881, возможно, у тебя та же проблема. 

Автор: katala 7.5.2006, 22:29
Lamer George,точно! спасибо! просто неправильный порядок следования 

Автор: tux 8.5.2006, 04:40
Цитата(katala @  7.5.2006,  23:47 Найти цитируемый пост)
пробовал добавить запись <property name="characterEncoding">windows-1251</property>
но не помогло . подскажи что надо добавить и что изменить  

А проблема-то в чем? Опять с кодировкой того, что записывается в базу данных? Если так, попробуй изменить URL подключения на такой:
Код

jdbc:mysql://localhost/hibernate?useUnicode=true&characterEncoding=utf-8

И еще вот из этих двух наборов:
Код

<property name="c3p0.max_size">1000</property>
<property name="c3p0.min_size">2</property>
<property name="c3p0.timeout">5000</property>
<property name="c3p0.max_statements">100</property>
<property name="c3p0.validate">true</property>

и
Код

<property name="dbcp.maxActive">1000</property>
<property name="dbcp.maxIdle">100</property>
<property name="dbcp.maxWait">5000</property>
<property name="dbcp.whenExhaustedAction">0</property>
<property name="dbcp.testOnBorrow">false</property>
<property name="dbcp.testOnReturn">false</property>
<property name="dbcp.ps.maxActive">100</property>
<property name="dbcp.ps.maxIdle">100</property>
<property name="dbcp.ps.maxWait">100</property>
<property name="dbcp.ps.whenExhaustedAction">0</property>

что-то одно убери. Это настройки для двух разных пулов соединений. Вместе они все равно использоваться не будут ни при каких обстоятельствах. Скорее всего используется первый, поскольку hibernate его первым находит. 

Автор: katala 28.5.2006, 16:29
опять вернулся к этой проблеме(тогда не дороботал а теперь из-за этого проблемы).
никак не получается хранить в базе инфу написанную ни кирилице.

Цитата

А проблема-то в чем? Опять с кодировкой того, что записывается в базу данных? Если так, попробуй изменить URL подключения на такой:

jdbc:mysql://localhost/hibernate?useUnicode=true&characterEncoding=utf-8

так пробовал но не помогло.
 
попробую сформулировать проблему еще раз:
 с формы получаю данные(на этом этапе без проблем) и сохраняю их в базе. потом когда их  выгружаю из базы  получаютя одни ???????. где мне и что исправить чтобы нормально принимать кирилицу????? 

Автор: tux 29.5.2006, 02:20
Вижу единственную причину почему так происходит - проблема в соединении с базой данных. Либо база данных создана с такой кодировкой, которая не поддерживает кириллицу (например, вообще без задания кодировки), либо между кодировкой базы и кодировкой клиента не поддерживается конвертация. 

Автор: Maksym 11.6.2006, 14:20
Поднимаю тему 
 smile 
Проблема кодировок решалась в системе подключением фильтра (первого в цепочке), который делал: 
Код
request.setCharacterEncoding("UTF-8");

После того как система мигрировала на Struts - кодировки опять поломались. Приведенный фильтр уже не помогает.
Есть подозрение, что Struts обращается к request'у раньше моего фильтра /а метод setCharacterEncoding() срабатывает только в случае если он вызван до первого обращания к request/ - о чем писали выше, но фильтр стоит как и раньше первым в цепочке.  smile 
Может я что-то где-то пропустил..?  smile

Добавлено @ 14:34 
Прошу прощения, в фильтр вообще не попадало управление  smile 
В мапинге фильтра нужно было написать *.do вместо /*.do или  /* , как я пробовал...  smile  ну где же логика..! smile  

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