Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблема с кодировкой WIN1251 / 13 сообщений из 13, страница 1 из 1
31.05.2020, 17:22
    #39964743
Eter2020
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой WIN1251
Доброго времени суток, коллеги!

Есть задача - загрузить информацию из XML (ЕГРЮЛ, если точнее) в базу на PSQL

Создана таблица:

Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE test_xml (
  "Id" serial PRIMARY KEY,
  "INN" VARCHAR(255) NOT NULL,
  "NameOPF" VARCHAR(255) NOT NULL,
  "NameUL" VARCHAR(255) NOT NULL
);



Есть запрос:

Код: sql
1.
2.
3.
4.
5.
INSERT INTO test_xml
  SELECT (xpath('//row/@ИНН', x))[1]::text::int AS INN,
         (xpath('//row/@ПолнНаймОПФ', x))[1]::text::int AS NameOPF,
         (xpath('//row/@НаимЮЛПолн', x))[1]::text::int AS NameUL
  FROM unnest(xpath('//row', pg_read_file('D:\\EGRUL.XML')::xml)) x;



Результат запроса:

ERROR: ОШИБКА: could not parse XML document
DETAIL: line 1: Unsupported encoding windows-1251
<?xml version="1.0" encoding="windows-1251" ?><EGRUL ДатаВыг="2020-01-01"><СвЮЛ
^
SQL-состояние: 2200M

В каком направлении копать?

для справки: PostgreSQL 12, база, сервер и клиент на WIN1251
...
Рейтинг: 0 / 0
31.05.2020, 17:45
    #39964753
Guzya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой WIN1251
Пересохраните файл в utf8 и пропишите encoding="utf-8"
...
Рейтинг: 0 / 0
31.05.2020, 17:49
    #39964759
Eter2020
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой WIN1251
Guzya,

Это было бы хорошее и рабочее решение, но к сожалению таких файлов 11684 штуки, общим весом 121 Гб.

Нужно другое решение.
...
Рейтинг: 0 / 0
31.05.2020, 18:32
    #39964787
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой WIN1251
DETAIL: line 1: Unsupported encoding windows-1251
Это отвечает непосредственно libxml2. Про что сказано :
libxml2 has a set of default converters for the following encodings (located in encoding.c):

UTF-8 is supported by default (null handlers)
UTF-16, both little and big endian
ISO-Latin-1 (ISO-8859-1) covering most western languages
ASCII, useful mostly for saving
HTML, a specific handler for the conversion of UTF-8 to ASCII with HTML predefined entities like © for the Copyright sign.

More over when compiled on an Unix platform with iconv support the full set of encodings supported by iconv can be instantly be used by libxml. On a linux machine with glibc-2.1 the list of supported encodings and aliases fill 3 full pages, and include UCS-4, the full set of ISO-Latin encodings, and the various Japanese ones.

Видимо, учитывая наблюдаемую ошибку, на вашей платформе libxml2 не поддерживает такую кодировку. Что, конечно, не является ошибкой: парсеры XML обязаны поддерживать UTF8 и UTF16, а всякое прочее - если захотят.
...
Рейтинг: 0 / 0
31.05.2020, 18:39
    #39964795
Eter2020
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой WIN1251
Melkij,

Спасибо, за разъяснение

Может есть рабочее решение этого вопроса? Авторство файлов у Налоговой, так что какие есть с такими и придется работать

Конвертировать при загрузке? Но тогда как? Каким инструментом пользоваться?
...
Рейтинг: 0 / 0
31.05.2020, 20:47
    #39964818
Guzya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой WIN1251
Напишите скриптик, который будет делать, то, что я описал выше.
Вы на какой ОС работаете?
...
Рейтинг: 0 / 0
01.06.2020, 13:45
    #39965000
Eter2020
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой WIN1251
Guzya,

На Win10

Подумываю на SQL Server от мелкомягких переползти, хотя ох как не хочется
Postgre роднее что-ли
...
Рейтинг: 0 / 0
01.06.2020, 15:11
    #39965054
Guzya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой WIN1251
Можете дать файлик для экспериментов?
...
Рейтинг: 0 / 0
01.06.2020, 15:56
    #39965066
Eter2020
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой WIN1251
Guzya, держите

на удивление нашел до 150Кб остальные в среднем от 8 до 12 МБ
...
Рейтинг: 0 / 0
01.06.2020, 20:14
    #39965147
Guzya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой WIN1251
Сделал скрипт на Python

Посмотрите
...
Рейтинг: 0 / 0
01.06.2020, 20:24
    #39965148
Eter2020
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой WIN1251
Guzya,

Вот это дело
Вот что значит, когда руки растут из нужного места!)
Огромейнейшее спасибо!!!
...
Рейтинг: 0 / 0
01.06.2020, 21:15
    #39965160
Guzya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой WIN1251
Вы проверьте, что оно работает, а то мне особо не на чем было.
...
Рейтинг: 0 / 0
02.06.2020, 14:04
    #39965335
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой WIN1251
Eter2020
На Win10

Ставишь набор позиксовских утилит из магазина, а дальше всё сводится к тривиальному "iconv | sed". Первый перегонит кодировку данных, второй поменяет заголовок в соответствие этому.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблема с кодировкой WIN1251 / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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