|
|
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
Привет. Ситуация следующая: необходимо парсить приходящие xlm-файлы. Приходят они в UTF-8, грузятся в CLOB и в 99+% случаев все ок. Но встречаются такие, которые отказывются парситься с ошибкой LPX-00217 invalid character. Я прочитал, что для нормальной работы с XML кодировка БД должна быть в соответствующем формате, но может быть есть возможность обойти экто ограничение? Интересно, что если в редакторе PL/Sql Developer-а открыть содержимое CLOB-ячейки а)вставить-убрать символ и сохранить б)скопировать текст и вставить в новую ячейку текст начинает парситься Основные коды символов, которые пока попадались Chr(8242) - 2 Chr(16662) - '' Chr(4374) - '' И если первый ищется инстром и, в принципе, меняется, то другие два символа данная ф-ция не видит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2018, 18:54 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
menja_zovut_deniska, А зачем искать? Код: plsql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2018, 19:08 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
menja_zovut_deniskaПриходят они в UTF-8, грузятся в CLOB и в 99+% случаев все ок. Но встречаются такие, которые отказывются парситься с ошибкой LPX-00217 invalid character. ... Основные коды символов, которые пока попадались Chr(8242) - 2 Chr(16662) - '' Chr(4374) - '' Что-то тут не так. Если БД действительно в cl8mswin1251, то при корректном сохранении UTF-8 в CLOB текст будет конвертирован в 1251, при этом символы, не представимые в 1251, будут автомагически заменены знаками вопроса. Поэтому проблема бьется на отдельные части: 1. Корректное сохранение данных в CLOB. 2. Корректная работа с xml. По первому пункту - сессионный characterset должен быть указан как al32utf8 для загрузки utf8-файлов. Если важно сохранять оригинальный xml - то, как вариант, воспользуйтесь NClob. Обратите внимание: charset, указанный в заголовке xml-документа, не будет соответствовать кодировке файла в БД. Если хочется хранить именно оригинал xml-документа, то рассмотрите BLOB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2018, 19:20 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousЕсли БД действительно в cl8mswin1251, то при корректном сохранении UTF-8 в CLOB текст будет конвертирован в 1251, при этом символы, не представимые в 1251, будут автомагически заменены знаками вопроса.В 11.2.0.2 (или 0.3) был заменён парсер xml. Неконвертируемые символы стали приводить, насколько я помню, именно к этой ошибке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 08:05 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
MaximaXXL, И реплейсил и транслейтил по кодам - ошибка та же самая ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 11:36 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
menja_zovut_deniska, поменяй CLOB на BLOB ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 11:39 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
[quot andrey_anonymous]menja_zovut_deniskaПо первому пункту - сессионный characterset должен быть указан как al32utf8 для загрузки utf8-файлов. Поставил эксперимент у себя локально БД 11.2.0.4 2 инстанса -win1251 -al32utf8 Гружу со своей машины следующим скриптом Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. Запрос следующий Код: sql 1. 2. 3. 4. 5. 6. 7. 8. В случае al32utf8 запрос отрабатывается как надо В случае 1251(в реестре специально поменял все nls_lang на american_america.al32utf8) ошибка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 11:42 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
Куй железоmenja_zovut_deniska, поменяй CLOB на BLOB Ничего не изменилось в плане ошибки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 11:48 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
menja_zovut_deniskaКуй железоmenja_zovut_deniska, поменяй CLOB на BLOB Ничего не изменилось в плане ошибки а ты в коде соотв. инструменты связанные с типом CLOB не поменял наверно ? Dbms_Lob.Load clob fromfile ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 11:53 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
menja_zovut_deniskaОсновные коды символов, которые пока попадались Chr(8242) - 2 Chr(16662) - '' Chr(4374) - ''При кодировке базы 1251 символы имеют код в диапазоне 0-255. Более того, приведенные числа не имеют никакого отношения и к символам UTF-8, так как двубайт должен начинаться с битов 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 11:53 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
Куй железо, конечно поменял)) Та бы скрипт не отпработал. Таблица-то другая ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 11:58 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
-2-menja_zovut_deniskaОсновные коды символов, которые пока попадались Chr(8242) - 2 Chr(16662) - '' Chr(4374) - ''При кодировке базы 1251 символы имеют код в диапазоне 0-255. Более того, приведенные числа не имеют никакого отношения и к символам UTF-8, так как двубайт должен начинаться с битов 10. Ок. Внешние xml-парсеры нормально разбирают файл, Oracle с кодировкой инстанса al32utf8 тоже. Вопрос в том, как и можно ли распарсить его в инстансе с кодировкой 1251 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 12:04 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
menja_zovut_deniska-2-пропущено... При кодировке базы 1251 символы имеют код в диапазоне 0-255. Более того, приведенные числа не имеют никакого отношения и к символам UTF-8, так как двубайт должен начинаться с битов 10. Ок. Внешние xml-парсеры нормально разбирают файл, Oracle с кодировкой инстанса al32utf8 тоже. Вопрос в том, как и можно ли распарсить его в инстансе с кодировкой 1251 наверно в этом у тебя проблема можно ли распарсить его в инстансе с кодировкой 1251 Lang_Ctx NUMBER := Dbms_Lob.Default_Lang_Ctx; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 12:09 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
menja_zovut_deniskaВопрос в том, как и можно ли распарсить его в инстансе с кодировкой 1251Можно. Но для этого нужно определить причину ошибки. Код: plsql 1. Зачем тут цикл. Да и вообще зачем столько кода, делай сразу селект из файла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 12:18 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
-2-menja_zovut_deniskaВопрос в том, как и можно ли распарсить его в инстансе с кодировкой 1251Можно. Но для этого нужно определить причину ошибки. Код: plsql 1. Зачем тут цикл. Да и вообще зачем столько кода, делай сразу селект из файла. Делал. Ситуация не менялась. Еще руками ctrl-c ctrl-v из файла в clob поле делал)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 12:26 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
menja_zovut_deniska, У мня была похожая проблема, ошибка возникала в момент сохранения в таблицу. Проблема скорее всего была не в определенном символе, а в последовательности, путем добавления лишних незначащих символов часто удавалось решить, но не всегда. До конца так и не разобрался ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 12:55 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
Можете сделать короткий wellformed- образец xml-файла, демонстрирующий проблему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 12:56 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
Я могу на почту или в личку кинуть сам заархивированный xml ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 13:24 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
menja_zovut_deniska, Просто сделайте минимальный пример и приложите к сообщению на форум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 15:22 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousmenja_zovut_deniska, Просто сделайте минимальный пример и приложите к сообщению на форум. Как я могу сделать минимальный пример, если не я формирую данные файлы и не знаю местарасположения данных символов в файле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 15:38 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
menja_zovut_deniskaandrey_anonymousmenja_zovut_deniska, Просто сделайте минимальный пример и приложите к сообщению на форум. Как я могу сделать минимальный пример, если не я формирую данные файлы и не знаю местарасположения данных символов в файле? Ну уж постарайтесь как-нибудь. Что-то мне подсказывает, что проблемные символы будут находиться в районе смещения 3556437 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 15:42 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousmenja_zovut_deniskaпропущено... Как я могу сделать минимальный пример, если не я формирую данные файлы и не знаю местарасположения данных символов в файле? Ну уж постарайтесь как-нибудь. Что-то мне подсказывает, что проблемные символы будут находиться в районе смещения 3556437 Лучше приложу более компактный код и скажу, что ровно ничего не поменялось Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 16:07 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
menja_zovut_deniskaЛучше приложу более компактный код и скажу, что ровно ничего не поменялось Да не особо лучше. Выстрел вслепую: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 17:21 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousmenja_zovut_deniskaЛучше приложу более компактный код и скажу, что ровно ничего не поменялось Да не особо лучше. Выстрел вслепую: [/src] Ну если не особо лучше, подскажите как я могу "сделать короткий wellformed- образец xml-файла, демонстрирующий проблему" Я с удовольствием... Выстрел не попал: ora-06502 numeric or value error invalid LOB locator ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 17:31 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
menja_zovut_deniskaкак я могу "сделать короткий wellformed- образец xml-файла, демонстрирующий проблему"Возьми исходный xml и отсеки все лишнее. menja_zovut_deniskaВыстрел не попал: ora-06502 numeric or value error invalid LOB locatorinsert empty_clob(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 17:41 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousЕсли хочется хранить именно оригинал xml-документа, то рассмотрите BLOB. +100500 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 17:52 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
-2-menja_zovut_deniskaкак я могу "сделать короткий wellformed- образец xml-файла, демонстрирующий проблему"Возьми исходный xml и отсеки все лишнее. menja_zovut_deniskaВыстрел не попал: ora-06502 numeric or value error invalid LOB locatorinsert empty_clob(). Это что значит? -2-menja_zovut_deniskaкак я могу "сделать короткий wellformed- образец xml-файла, демонстрирующий проблему"Возьми исходный xml и отсеки все лишнее. menja_zovut_deniskaВыстрел не попал: ora-06502 numeric or value error invalid LOB locatorinsert empty_clob(). далее ora-22289 не может использовать LOADFROMFILE при не открытом LOB Коды Bfile_Csid 873(al32utf8) и 871 (utf8) показывают один и тот же результат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 17:57 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsevandrey_anonymousЕсли хочется хранить именно оригинал xml-документа, то рассмотрите BLOB. +100500 Оригинал не нужен. Задача - распарсить документ а cl8mswin1251 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 17:58 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
Жалко править документ нельзя. В сообщении 21720682 не почистил цитаты. "Это что значит?" относилось к "Возьми исходный xml и отсеки все лишнее" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 18:00 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
Так и парсите исходный документ, а не занимайтесь мазохизмом с кодировками Насколько я помню (если не ошибаюсь) в XMLType можно сразу и BLOB преобразовать. Запихивать в CLOB не обяательно. https://docs.oracle.com/cd/B19306_01/appdev.102/b14258/t_xml.htm#i1009657 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 18:17 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevТак и парсите исходный документ, а не занимайтесь мазохизмом с кодировками Насколько я помню (если не ошибаюсь) в XMLType можно сразу и BLOB преобразовать. Запихивать в CLOB не обяательно. https://docs.oracle.com/cd/B19306_01/appdev.102/b14258/t_xml.htm#i1009657 Какую конкретно ф-цию вы имеете в виду и каким способом? createXML? откуда блоб брать? уже загруженный из таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 18:25 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
menja_zovut_deniskaоткуда блоб брать? уже загруженный из таблицы?А как же ты это делал раньше?menja_zovut_deniska-2-...делай сразу селект из файла.Делал. Ситуация не менялась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 18:57 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousВыстрел вслепую: накосячил аж в двух местах :) - не поправил insert - забыл, что bfilename позволяет автомагически открыть файл только в dml. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. menja_zovut_deniskaКакую конкретно ф-цию вы имеете в виду и каким способом? createXML? Можно и ее: Код: plsql 1. Можно и просто конструктором попробовать: Код: plsql 1. Как получить тестовый xml: вообще непонятно в чем затруднения. Берете свой файл, дающий ошибко. Вырезаете все подряд пока ошибко не исчезнет - удобно половинным делением. Возвращаете обратно последний вырезанный кусок, убеждаетесь что проблема вернулась, режете внутри него. Через несколько итераций получите достаточно короткий документ, который можно зазиповать и прибить на форум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 19:32 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
Поиграться-разобраться можно попробовать на этом примере: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 21:56 |
|
||
|
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
|
|||
|---|---|---|---|
|
#18+
Спасибо большое за советы и ответы. Каюсь, был немного не прав в части select-а сразу из файла Начинал работать с инстансом на 10.2.0.4 И в нем при попытке select-а из файла аля Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Вылезала ошибка LX-00200 could not convert from encoding UTF-8 to WINDOWS-1251 Сейчас проверил на 11.2.0.4 - селект из файла работает. Проверил на другом инстансе 11.2.0.3 - работает А вот на 10.2.0.4 на двух разных инстансах запрос к файлу выдает ошибку. NLS_CHARSET_ID('UTF8') тоже выдает ошибку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 01:02 |
|
||
|
|

start [/forum/topic.php?all=1&fid=52&tid=1883266]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
151ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
| others: | 206ms |
| total: | 445ms |

| 0 / 0 |
