Включение набора символов UTF-8 в JSF2.0, Hibernate, MySQL

Мы должны включить кодировку символов UTF-8 в наше веб-приложение, разработанное с использованием JSF2.0, Hibernate, MySQL.

Ниже приведен источник данных, определенный в нашем файле контекста приложения.

<bean id="DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="com.mysql.jdbc.Driver" />   
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/dbname" />  
        <property name="maxPoolSize" value="10" />
        <property name="maxStatements" value="0" />
        <property name="minPoolSize" value="5" />
        <property name="useUnicode" value="yes" />
        <property name="characterEncoding" value="UTF-8" />
    </bean>

При запуске приложения мы получаем исключение

Error creating bean with name 'SessionFactory' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Cannot resolve reference to bean 'DataSource'  Error creating bean with name 'DataSource' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Invalid property 'useUnicode' of bean class [com.mchange.v2.c3p0.ComboPooledDataSource]: Bean property 'useUnicode' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?

Мы также пытались использовать следующее, но получили сообщение об ошибке

<bean id="DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="com.mysql.jdbc.Driver" />   
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/dbname?useUnicode=yes&characterEncoding=UTF-8;" />  
        <property name="maxPoolSize" value="10" />
        <property name="maxStatements" value="0" />
        <property name="minPoolSize" value="5" />
    </bean>


Error: The reference to entity "characterEncoding" must end with the ';' delimiter

person NKS    schedule 10.01.2014    source источник


Ответы (2)


После некоторой работы я могу справиться с проблемой. Ниже приведен код, который работает для меня, чтобы включить JDBC, работающий с UTF8.

<bean id="DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="com.mysql.jdbc.Driver" />   
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/dbname?useUnicode=true&amp;characterEncoding=UTF-8" />  
        <property name="maxPoolSize" value="10" />
        <property name="maxStatements" value="0" />
        <property name="minPoolSize" value="5" />
    </bean>

Использование useUnicode=true&amp;characterEncoding=UTF-8 с &amp; послужило цели

Чтобы иметь возможность использовать то же самое с Hibernate, также укажите следующее в свойствах гибернации.

<property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">false</prop>
                <prop key="hibernate.connection.useUnicode">true</prop>
                <prop key="hibernate.connection.characterEncoding">UTF-8</prop>
                <prop key="hibernate.connection.charSet">UTF-8</prop>               
            </props>
        </property> 

Также укажите формат кодировки запроса в фильтре

public class ApplicationFilter implements Filter {    
        public void destroy() {
        }

    public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
            request.setCharacterEncoding("utf-8");
        }

        public void init(FilterConfig fConfig) throws ServletException {
        }
    }

Теперь, даже если ваше приложение и БД не поддерживают специальные символы, проверьте набор символов базы данных, попробуйте воссоздать базу данных и использовать кодировку UTF8 вместо latin1.

person NKS    schedule 10.01.2014
comment
Это сработало! При использовании postgresq мне нужно было установить CLIENT_ENCODING TO 'UTF8', чтобы изменить кодировку символов. Взгляните на postgresql.org/docs/9.3/static/multibyte.html< /а> - person kimy82; 09.12.2016

Когда вы устанавливаете MySQL с помощью установщика пользовательского интерфейса, вы можете установить набор символов по умолчанию как «UTF-8». После этого все работает нормально. Я всегда устанавливаю это во время установки, поэтому я не знаю, как установить его позже. Но если вы не хотите переустанавливать MySQL, перейдите по этой ссылке:

Как настроить utf-8 в качестве стандартного набора символов для сервера mysql?

person GregTom    schedule 10.01.2014