|
Ещё одна проблема с импортом XML-файла в кодировке UTF8
|
|||
---|---|---|---|
#18+
Здравствуйте! Пытаюсь записать данные из XML-файла в кодировке UTF8 в табличку и получаю каракули. Кодировка базы тоже UTF8. На примере одного поля удалось угадать, что отображаемый ужас вида РџРЎ, соответствующий кириллице "ПС", это select CONVERT_FROM('ПС'::bytea, 'WIN1251') ; А вот обратного преобразования подобрать не удалось. Подскажите, пожалуйста, возможно ли это сделать. И означает ли это, что на стадии передачи файла в процедуру он где-то мог поменять кодировку? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 11:51 |
|
Ещё одна проблема с импортом XML-файла в кодировке UTF8
|
|||
---|---|---|---|
#18+
Кодировка содержимого XML должна соответствовать указанной в его заголовке. Всё остальное - на парсере. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 13:36 |
|
Ещё одна проблема с импортом XML-файла в кодировке UTF8
|
|||
---|---|---|---|
#18+
Кодировка соответствует и вроде бы к строкам не надо применять convert_from(..., 'utf-8') в отличие от windows-1251. Однако получаем каракули, и никакая конвертация не помогает. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 14:26 |
|
Ещё одна проблема с импортом XML-файла в кодировке UTF8
|
|||
---|---|---|---|
#18+
ArkadyL, А почему вы считаете что у вас каракули в базе? Вы каким инструментом смотрите? -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 14:57 |
|
Ещё одна проблема с импортом XML-файла в кодировке UTF8
|
|||
---|---|---|---|
#18+
В DBeaver. То, что импортируем, видим а-ля РџРЎ. Остальные записи в этой же табличке в кириллице. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 15:17 |
|
Ещё одна проблема с импортом XML-файла в кодировке UTF8
|
|||
---|---|---|---|
#18+
ArkadyL В DBeaver. То, что импортируем, видим а-ля РџРЎ. Остальные записи в этой же табличке в кириллице. Тогда надо смотреть как именно вы собтсвенно "Пытаюсь записать данные из XML-файла в кодировке UTF8 в табличку" может у вас там на входе client_encoding win1251 получается как часто у виндовых приложений бывает а вы ему туда UTF8 суёте. Кодировка базы и кодировка в которой база работает с конкретным приложением-коннектов - разные и не особо связанные вещи. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 15:26 |
|
Ещё одна проблема с импортом XML-файла в кодировке UTF8
|
|||
---|---|---|---|
#18+
Передаю этот файл в процедуру. Может, он по дороге портится? Надо перед запуском процедуры из приложения установить SET client_encoding utf8? Или можно в самой процедуре перед выполнением команды? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 15:53 |
|
Ещё одна проблема с импортом XML-файла в кодировке UTF8
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 16:05 |
|
Ещё одна проблема с импортом XML-файла в кодировке UTF8
|
|||
---|---|---|---|
#18+
Если запустить из приложения SHOW client_encoding, получаем UTF8. Точнее, пользователь в приложении выбирает файл, а в процедуру он отправляется преобразованным в строку. Там и обрабатывается. Для чего же на сервере команды обработки XML? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 16:27 |
|
Ещё одна проблема с импортом XML-файла в кодировке UTF8
|
|||
---|---|---|---|
#18+
ArkadyL Если запустить из приложения SHOW client_encoding, получаем UTF8. Точнее, пользователь в приложении выбирает файл, а в процедуру он отправляется преобразованным в строку. Там и обрабатывается. Для чего же на сервере команды обработки XML? Тогда должно работать. Вставляйте отладочную информацию в процедуру вашу и смотрите что там на входе... что в середине и смотрите где именно кодировка ломается. PS: например вы 100% уверенны что в виде строки в процедуру данные в utf8 в реальности уходят? -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 16:39 |
|
Ещё одна проблема с импортом XML-файла в кодировке UTF8
|
|||
---|---|---|---|
#18+
Вот этим вопросом я и задался в первом сообщении. Это возможно определить? То, что получается в таблице, соответствует преобразованию CONVERT_FROM('ПС'::bytea, 'WIN1251') Я бы применил к чтению тегов обратное преобразование, но что-то ничего не подходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 16:48 |
|
Ещё одна проблема с импортом XML-файла в кодировке UTF8
|
|||
---|---|---|---|
#18+
Я делаю ((xpath('ZAP/SERIES/text()', x))[1])::varchar(5), а получаю значение, соответствующее преобразованию CONVERT_FROM('ПС'::bytea, 'WIN1251') Вот такой текст РџРЎ ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 17:01 |
|
Ещё одна проблема с импортом XML-файла в кодировке UTF8
|
|||
---|---|---|---|
#18+
ArkadyL Вот этим вопросом я и задался в первом сообщении. Это возможно определить? Ну так выводите в лог отладочную информацию 1)саму строку на входе как есть (ну или её кусок если она слишком длинная) 2)результат xpath и смотрите в какой кодировке оно вывелось... дальше становится понятнее где оно ломается и почему. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 01:46 |
|
|
start [/forum/topic.php?fid=53&msg=40084885&tid=1993932]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 262ms |
total: | 399ms |
0 / 0 |