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


Автор: Сонечка 27.3.2012, 17:13
При запуске процедуры добавления в базу (попытка запихнуть в нее содержание в русской раскладке) выдается следующее сообщение

Код

SEVERE: Incorrect string value: '\xD0\xA1\xD0\x9D\xD0\x93' for column 'region' at row 1
Exception in thread "AWT-EventQueue-0" org.hibernate.exception.GenericJDBCException: could not insert: [StateTable]


Контент вводится даже не из пользовательского интерфейса, а просто из массива. При этом, если поменять раскладку на английскую, все нормально. Если в базу из консоли вводить значения в русской раскладке, тоже все нормально.

Появилось это после того, как в конфигурационный файл hibernate была добавлена строка:    
Код

<property name="hibernate.connection.characterEncoding">UTF-8</property>

До этого добавленное просто хранилось иероглифами.
В настройках проекта тоже значится кодировка UTF-8.
http://s2.ipicture.ru/Gallery/Viewfull/9526598.html
В чем может быть дело? Есть еще какие-то настройки кодировки в идее, о которых я не знаю?(

Автор: Сонечка 27.3.2012, 17:29
Может русские слова надо как-то выделять, чтобы в юникоде они не казались метасимволами? smile 


Автор: Старовъръ 27.3.2012, 22:27
Ну а в дебаге ты как видешь эти символы? Если нормально, то значит соединение с БД шалит. Попробуй указать в параметрах соединения:
jdbc:mysql://localhost/database?characterEncoding=UTF-8

Автор: Сонечка 28.3.2012, 11:27
Цитата(Старовъръ @ 27.3.2012,  22:27)
Ну а в дебаге ты как видешь эти символы? Если нормально, то значит соединение с БД шалит. Попробуй указать в параметрах соединения:
jdbc:mysql://localhost/database?characterEncoding=UTF-8

Очевидно вот они, символы '\xD0\x9E\xD0\x9E\xD0\x9D' . Вплоне себе юникодовые%) Они такими должны быть?
Код

SEVERE: Incorrect string value: '\xD0\x9E\xD0\x9E\xD0\x9D' for column 'orgName' at row 1


Параметры соединения в конфигурационном файле. Там есть строка
 <property name="hibernate.connection.characterEncoding">UTF-8</property>. Разве ее не достаточно?

Автор: Сонечка 28.3.2012, 12:53
Поменяла 
Код
 jdbc:mysql://localhost/hr
 
на 
Код
 jdbc:mysql://localhost/hr?characterEncoding=UTF-8

Ничего не изменилось((

Автор: Pawl 28.3.2012, 20:41
Цитата(Сонечка @  28.3.2012,  12:53 Найти цитируемый пост)
Ничего не изменилось((

Попробуйте у себя в проекте использовать фильтр
Код

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

//encoding-filter
public class SetCharacterEncodingFilter implements Filter {
    protected String encoding = "UTF-8";
    protected FilterConfig filterConfig;

    public void destroy() {
        encoding = null;
        filterConfig = null;
    }

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

    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
        if (filterConfig.getInitParameter("encoding") != null) {
            this.encoding = filterConfig.getInitParameter("encoding");
        }
    }
}

и пропишите его в web.xml приложения:
Код

    <filter>
        <filter-name>Set Character Encoding</filter-name>
        <filter-class>SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>Set Character Encoding</filter-name>
        <servlet-name>action</servlet-name>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>ERROR</dispatcher>
    </filter-mapping>

У меня фильтр прописан после описания сервлета
Код

<servlet>...</servlet>

Описать фильтр можете, как у меня, а вот маппинг у Вас будет свой.

Автор: Старовъръ 29.3.2012, 00:30
Сонечка, если ты в дебаге такое видешь, то нет, они должны быть обычными символами. В таком случае проблема не с работай с базой данных, а в том как ты создаешь эти строки. Если приведешь кусок кода, то возможно что-то прояснится. Кстати, а ты каким-то инструментом для сборки пользуешься? Может это не IDE виновата.. Ну и еще одно - может файл был не в той кодировке до того, как ты поставила эти параметры? В таком случае в пункте File есть пункт про перевод открытого файла в такую-то кодировку.
Pawl, фильтры и сервлеты не причем, присмотрись к первому посту, ТС говорит, что строки создаются прям в коде.

Автор: Pawl 29.3.2012, 08:06
Цитата(Старовъръ @  29.3.2012,  00:30 Найти цитируемый пост)
Pawl, фильтры и сервлеты не причем, присмотрись к первому посту, ТС говорит, что строки создаются прям в коде.

Да, пардон, действительно был невнимателен! Тогда да, необходимо сами исходники посмотреть. И еще, попробуйте database url оформить так:
Код

jdbc:mysql://localhost/hr?useUnicode=true&characterEncoding=utf8&characterSetResults=utf-8

Автор: Сонечка 29.3.2012, 11:50
Цитата(Pawl @ 29.3.2012,  08:06)
Цитата(Старовъръ @  29.3.2012,  00:30 Найти цитируемый пост)
Pawl, фильтры и сервлеты не причем, присмотрись к первому посту, ТС говорит, что строки создаются прям в коде.

Да, пардон, действительно был невнимателен! Тогда да, необходимо сами исходники посмотреть. И еще, попробуйте database url оформить так:
Код

jdbc:mysql://localhost/hr?useUnicode=true&characterEncoding=utf8&characterSetResults=utf-8

Если написать так, то 
Код

SEVERE: Error parsing XML: hibernate.cfg.xml(14)


А вот поменять кодировку файла почему-то в идее не получается, ибо Encoding неактивно. smile  Причем ни в одном файле проекта.
Преобразовала в Notepad++ в utf8. Теперь у меня следующее
Код

illegal character: \65279


Совсем ничего не понимаю

Добавлено через 5 минут и 9 секунд
У файла кодировка UTF8 без BOM

Автор: Сонечка 9.4.2012, 15:04
Вопрос решился пересозданием базы лапами из консоли с прописыванием кодировки, если кому интересно

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