powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Ещё одна проблема с импортом XML-файла в кодировке UTF8
14 сообщений из 14, страница 1 из 1
Ещё одна проблема с импортом XML-файла в кодировке UTF8
    #40084810
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Пытаюсь записать данные из XML-файла в кодировке UTF8 в табличку и получаю каракули.
Кодировка базы тоже UTF8.

На примере одного поля удалось угадать, что отображаемый ужас вида РџРЎ, соответствующий кириллице "ПС",
это select CONVERT_FROM('ПС'::bytea, 'WIN1251') ;

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

И означает ли это, что на стадии передачи файла в процедуру он где-то мог поменять кодировку?
...
Рейтинг: 0 / 0
Ещё одна проблема с импортом XML-файла в кодировке UTF8
    #40084842
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кодировка содержимого XML должна соответствовать указанной в его заголовке. Всё остальное - на парсере.
...
Рейтинг: 0 / 0
Ещё одна проблема с импортом XML-файла в кодировке UTF8
    #40084863
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кодировка соответствует и вроде бы к строкам не надо применять convert_from(..., 'utf-8') в отличие от windows-1251. Однако получаем каракули, и никакая конвертация не помогает.
...
Рейтинг: 0 / 0
Ещё одна проблема с импортом XML-файла в кодировке UTF8
    #40084872
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArkadyL,

А почему вы считаете что у вас каракули в базе? Вы каким инструментом смотрите?

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Ещё одна проблема с импортом XML-файла в кодировке UTF8
    #40084877
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В DBeaver. То, что импортируем, видим а-ля РџРЎ. Остальные записи в этой же табличке в кириллице.
...
Рейтинг: 0 / 0
Ещё одна проблема с импортом XML-файла в кодировке UTF8
    #40084880
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArkadyL
В DBeaver. То, что импортируем, видим а-ля РџРЎ. Остальные записи в этой же табличке в кириллице.


Тогда надо смотреть как именно вы собтсвенно "Пытаюсь записать данные из XML-файла в кодировке UTF8 в табличку"
может у вас там на входе client_encoding win1251 получается как часто у виндовых приложений бывает а вы ему туда UTF8 суёте.

Кодировка базы и кодировка в которой база работает с конкретным приложением-коннектов - разные и не особо связанные вещи.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Ещё одна проблема с импортом XML-файла в кодировке UTF8
    #40084885
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Передаю этот файл в процедуру. Может, он по дороге портится? Надо перед запуском процедуры из приложения установить
SET client_encoding utf8? Или можно в самой процедуре перед выполнением команды?
...
Рейтинг: 0 / 0
Ещё одна проблема с импортом XML-файла в кодировке UTF8
    #40084889
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArkadyL
Передаю этот файл в процедуру. Может, он по дороге портится? Надо перед запуском процедуры из приложения установить
SET client_encoding utf8? Или можно в самой процедуре перед выполнением команды?


Эм... это крайне плохая идея так файлы грузить в базу.
Вот будет у вас база на одном сервере а приложение на другом (физическом) и вся эта магия превратиться в тыкву.
Таки правильно читать файл приложением и писать в базу штатными средствами.

В вашей ситуации я бы для начала посмотреть а какой client_encoding при работе с базой у вашего приложения получается.
А то поставите SET client_encoding utf8 и всё сломается.

PS: надо смотреть как у вас ваша процедура файл читает. pg_read_file не просто так "Restricted to superusers by default, but other users can be granted EXECUTE to run the function." потому что user level приложения её использовать не должны.


PPS: Можете попробовать как описано в документации через сделать а не возиться с client_encoding:
pg_read_binary_file is similar to pg_read_file, except that the result is a bytea value; accordingly, no encoding checks are performed. In combination with the convert_from function, this function can be used to read a file in a specified encoding:
SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8');
хотя тоже решение так себе.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Ещё одна проблема с импортом XML-файла в кодировке UTF8
    #40084893
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если запустить из приложения SHOW client_encoding, получаем UTF8.
Точнее, пользователь в приложении выбирает файл, а в процедуру он отправляется преобразованным в строку. Там и обрабатывается.
Для чего же на сервере команды обработки XML?
...
Рейтинг: 0 / 0
Ещё одна проблема с импортом XML-файла в кодировке UTF8
    #40084894
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArkadyL
Если запустить из приложения SHOW client_encoding, получаем UTF8.
Точнее, пользователь в приложении выбирает файл, а в процедуру он отправляется преобразованным в строку. Там и обрабатывается.
Для чего же на сервере команды обработки XML?


Тогда должно работать.
Вставляйте отладочную информацию в процедуру вашу и смотрите что там на входе...
что в середине
и смотрите где именно кодировка ломается.

PS: например вы 100% уверенны что в виде строки в процедуру данные в utf8 в реальности уходят?


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Ещё одна проблема с импортом XML-файла в кодировке UTF8
    #40084897
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот этим вопросом я и задался в первом сообщении. Это возможно определить?
То, что получается в таблице, соответствует преобразованию CONVERT_FROM('ПС'::bytea, 'WIN1251')
Я бы применил к чтению тегов обратное преобразование, но что-то ничего не подходит.
...
Рейтинг: 0 / 0
Ещё одна проблема с импортом XML-файла в кодировке UTF8
    #40084899
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я делаю ((xpath('ZAP/SERIES/text()', x))[1])::varchar(5), а получаю значение, соответствующее преобразованию CONVERT_FROM('ПС'::bytea, 'WIN1251')
Вот такой текст РџРЎ
...
Рейтинг: 0 / 0
Ещё одна проблема с импортом XML-файла в кодировке UTF8
    #40084958
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArkadyL
Вот этим вопросом я и задался в первом сообщении. Это возможно определить?


Ну так выводите в лог отладочную информацию
1)саму строку на входе как есть (ну или её кусок если она слишком длинная)
2)результат xpath

и смотрите в какой кодировке оно вывелось... дальше становится понятнее где оно ломается и почему.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Ещё одна проблема с импортом XML-файла в кодировке UTF8
    #40085150
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! Оказывается, функция, которая преобразовывает файл в строку, и впрямь уродует символы.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Ещё одна проблема с импортом XML-файла в кодировке UTF8
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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