powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с кодировкой при чтении из файла в БД на PostgreSQL
7 сообщений из 7, страница 1 из 1
Проблемы с кодировкой при чтении из файла в БД на PostgreSQL
    #38778939
StavRazor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Возникла проблема с кодировкой при импорте csv-файла в БД под управлением PostgreSQL 9.3: на всех этапах получения данных и импорта их в БД жестко указана кодировка WIN1251, но в базу данные попадают с кодировкой UTF-8.
1. Данные берутся из БД под управлением Firebird 2.5, кодировка базы WIN1251.
2. В параметрах объекта Connection к этой БД указана кодировка WIN1251.
Код: java
1.
2.
3.
4.
5.
6.
Connection connectionToOSP;
Properties conProps = new Properties();
conProps.setProperty("user", login);
conProps.setProperty("password", password);
conProps.setProperty("encoding", "WIN1251");
connectionToOSP = DriverManager.getConnection("jdbc:firebirdsql://" + ip + ":" + port + "/" + alias, conProps);


3. Данные в csv-файл пишутся следующим образом:
Код: java
1.
BufferedWriter writeIntoFile = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "Cp1251"));


4. Из csv-файла:
Код: java
1.
BufferedReader fileReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "Cp1251"));


5. В запросе к БД на PostgreSQL кодировка указана:
Код: plsql
1.
2.
3.
4.
5.
6.
COPY mvv_bank_request(req_id, req_num, req_date, res_id, res_num, res_date, 
ip_num, ip_risedate, id_num, id_date, debtor_type, debtor_name, debtor_f, 
debtor_i, debtor_o, debtor_birthdate, debtor_birthplace, debtor_addr, debtor_inn, 
ip_sum, ip_rest_sum, fio_spi, h_spi, osp_code, processed, import_date, 
contractor) 
FROM STDIN USING DELIMITERS ';' CSV NULL 'null' ENCODING 'WIN1251';               


6. В объекте Connection для подключения к БД на PostgreSQL кодировка указана аналогично подключению к Firebird 2.5.
7. На сервере PostgreSQL команды
Код: plsql
1.
show server_encoding;

и
Код: plsql
1.
show client_encoding;

показывают, что кодировка стоит "WIN1251". Локалью по умолчанию на самом сервере является ru_RU.Cp1251.

Но при попытке просмотреть вставленные данные через psql явно видно, что кодировка не та.
Через pg_admin выдает ошибку: ОШИБКА: для символа с последовательностью байт 0x98 из кодировки "WIN1251" нет эквивалента в "UTF8"
SQL-состояние: 22P05
Перекопал множество статей - ничего не помогло. Откуда появилась кодировка UTF-8 непонятно.
Уважаемые знатоки, в какую сторону смотреть?
...
Рейтинг: 0 / 0
Проблемы с кодировкой при чтении из файла в БД на PostgreSQL
    #38778957
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CSV файл нормальный?
...
Рейтинг: 0 / 0
Проблемы с кодировкой при чтении из файла в БД на PostgreSQL
    #38778960
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно пример того как выглядит "явно кодировка не так"? Чтобы понять в какую сторону сломалось.
...
Рейтинг: 0 / 0
Проблемы с кодировкой при чтении из файла в БД на PostgreSQL
    #38778974
StavRazor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
Попов Евгений Сергеевич
Декодер показал, что это текст в кодировке UTF-8, конвертированный в WIN1251.
CSV-файл в кодировке WIN1251, отображается нормально.
...
Рейтинг: 0 / 0
Проблемы с кодировкой при чтении из файла в БД на PostgreSQL
    #38778992
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StavRazor,

А какая связь между п4 и п5?
...
Рейтинг: 0 / 0
Проблемы с кодировкой при чтении из файла в БД на PostgreSQL
    #38778995
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StavRazor,

А можете CSV файл приаттачить? Кусок хотя бы?
...
Рейтинг: 0 / 0
Проблемы с кодировкой при чтении из файла в БД на PostgreSQL
    #38779037
StavRazor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Если я правильно понял вопрос, то для импорта содержимого файла в базу использую метод объекта класса CopyManager copyIn().
Код: java
1.
2.
3.
4.
5.
6.
copyManager.copyIn("COPY mvv_bank_request(req_id, req_num, req_date, res_id, res_num, res_date, "
                    + "ip_num, ip_risedate, id_num, id_date, debtor_type, debtor_name, debtor_f, "
                    + "debtor_i, debtor_o, debtor_birthdate, debtor_birthplace, debtor_addr, debtor_inn, "
                    + "ip_sum, ip_rest_sum, fio_spi, h_spi, osp_code, processed, import_date, "
                    + "contractor) FROM STDIN USING DELIMITERS ';' CSV NULL 'null' "
                    + "ENCODING 'WIN1251'", fileReader);



Проблема, в общем-то решилась, в запросе, указанном выше, кодировку указывать не нужно (ENCODING 'WIN1251'). Этим занимается сам класс CopyManager, на основании полученной кодировки от объекта класса Reader. Вероятно, происходил какой-то конфликт.
Спасибо большое за наводящий вопрос и желание помочь! Всего доброго!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с кодировкой при чтении из файла в БД на PostgreSQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]