|
|
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
Есть CLOB в UTF8, необходимо сконвертировать в WIN1251. Стандартный Convert работает, но только со строками до 32к. Искал в форуме - в основном задача стоит WIN1251->UTF8 и вроде бы можно по частям, но в моем случае с исходным UTF8 не определить на какие части нужно делить строку. Может кто-то знает правильное решение данной проблемы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 17:28 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
max13в моем случае с исходным UTF8 не определить на какие части нужно делить строку Неправда ваша. Методы пакета dbms_lob прекрасно определяют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 20:31 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
А можно поподробнее? Плохо представляю как dbms_lob'у можно сказать что у меня в CLOB сидит UTF8 при том, что NLS_CHARACTERSET = CL8MSWIN1251. Допустим вот так: DECLARE a CLOB; b CLOB; BEGIN a := 'Привет!'; b := CONVERT(a, 'CL8MSWIN1251', 'UTF8'); dbms_output.put_line(b); END; -------------------------------------- Привет! как разбить "a" на: a1='при' a2='вет!' ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 09:31 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
Насколько я знаю, утф-8 шифрует данные толи по 4, толи по 2 байта. делите длину строки кратно 4 и нет проблем :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 10:53 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
chameleon82Насколько я знаю, утф-8 шифрует данные толи по 4, толи по 2 байта. - UTF8 не шифрует данные - codepoint в UTF8 может быть представлен цепочкой байт длиной от 1 до 6. За подробностями - на unicode.org. 2TC: Установите на клиенте NLS_LANG=.CL8MSWIN1251, выгрузите CLOB в файл(ы), смените NLS_LANG на .UTF8 и загрузите обратно. Oracle Developer и прочие java-тулзы для операции не подойдут, нужно что-то с поддержкой монобайта - sql*plus, например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 11:02 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
max13как dbms_lob\'у можно сказать что у меня в CLOB сидит UTF8 при том, что NLS_CHARACTERSET = CL8MSWIN1251.10g Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 11:44 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous: вариант интересный, хотя с реализацией проблема :) Elic: действительно работает, 100к символов уже сконвертил! я пытался что-то подобное соорудить, но безрезультатно, не хватало ключевой строки: blob_csid =>NLS_CHARSET_ID ('UTF8') Спасибо всем! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 12:26 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
max13у меня в CLOB сидит UTF8 при том, что NLS_CHARACTERSET = CL8MSWIN1251. Это другое дело. А как вы это получили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 15:09 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
wildwindЭто другое дело. А как вы это получили? Да, извиняюсь, сразу не написал про настройку базы. Текст в UTF8 поступает от внешнего средства ("черного ящика") посредством COM-объектов и падает в CLOB. Кстати в нем XML и была даже мысль на уровне dbms_xmlparser как-то конвертировать, но что-то я ничего по теме в нем не нашел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2010, 11:06 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
max13Текст в UTF8 поступает от внешнего средства ("черного ящика") посредством COM-объектов и падает в CLOB. Измените настройки - COM-объекты, посредством которых данные попадают в базу, должны заявить кодировку, соответствующую данным, т.е. UTF8. В этом случае перекодировка будет осуществляться автомагически. Текущая настройка - cl8mswin1251 - неверна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2010, 13:58 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous Измените настройки - COM-объекты, посредством которых данные попадают в базу, должны заявить кодировку, соответствующую данным, т.е. UTF8. В этом случае перекодировка будет осуществляться автомагически. Текущая настройка - cl8mswin1251 - неверна. Конкретно данная задача составляет 0.1% от всей системы, и ради нее переводить всю базу на UTF8 неразумно. Не очень понял насчет "В этом случае перекодировка будет осуществляться автомагически.". Если все будет в UTF8, то и перекодировка никакая не нужна ведь? или я чего-то не понял... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2010, 14:44 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
max13или я чего-то не понял... Именно. Globalization Support Guide в помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2010, 14:46 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
max13, Клиент, будь то COM или SQL+, не должен обманывать сервер о кодировке данных которые он запихивает в базу. Если твой COM сообщит о том что он собирается пихать UTF8 то при пересылке данных в базу которая в MSWIN1251 произойдет конвертация в кодировку базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2010, 14:50 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
Proteusmax13, Клиент, будь то COM или SQL+, не должен обманывать сервер о кодировке данных которые он запихивает в базу. Если твой COM сообщит о том что он собирается пихать UTF8 то при пересылке данных в базу которая в MSWIN1251 произойдет конвертация в кодировку базы. Кажется начинаю понимаю о чем речь. Но в моем случае никакой клиент не пытается что-то вставить в базу Oracle. Наоборот - есть COM, который представляет собой черный ящик и умеет возвращать строку UTF8 (как он это делает, откуда берет данные я даже не представляю, знаю только как запустить). В результате после манипуляций с этим самым COM в pl/sql процедуре возникает строка UTF8, которую нужно конвертнуть, чтобы можно было обработать в базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2010, 15:51 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
не знаю как там COM не работал с ними. Но можно предположить что если строка появляется сама по себе то COM сам устанавливает соединение с базой. можно попробовать сменить значение NLS_LANG в реестре на *******_******.UTF8 того хоста на котором поднимается COM и посмотреть на результат, будет ли продолжать приходить UTF8 или в базе появится другая кодировка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2010, 16:00 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
Proteusне знаю как там COM не работал с ними. Но можно предположить что если строка появляется сама по себе то COM сам устанавливает соединение с базой. можно попробовать сменить значение NLS_LANG в реестре на *******_******.UTF8 того хоста на котором поднимается COM и посмотреть на результат, будет ли продолжать приходить UTF8 или в базе появится другая кодировка. да, COM скорее всего сам устанавливает соединение с базой, но только не с моей, оракловой, а с внешней (которая находится вообще где-то в европе), что-то читает оттуда и как результат выдает мне строку. В описании COM-объекта, которым я располагаю написано, что функция возвращает строку в UTF8. Судя по экспериментам так оно и есть. Вообще COM-функцию я запускаю через JavaScript на клиенте (ORDCOM не удалось побороть, что-то с ним не так), затем через Ajax->Apache->Application Server процедура pl/sql на сервере, у которой в качестве параметра та самая строка. Я пытался в HTTP заголовке аякса указать UTF8, но то ли не то писал, то ли действительно не срабатывает и не понятно должно ли. Где-то вот тут: ... httpRequest.open( "POST", url, true ); httpRequest.setRequestHeader(''Content-Type'', ''"text/xml"''); ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2010, 16:35 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
Следовательно в твою то базу кто закидывает строку? Твое приложение? Тогда оно должно озаботится тем чтобы открытая сессия к базе данных получила ту кодировку в которой передает данные. Раз у тебя UTF8 так и укажи что у тебя UTF8. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2010, 16:49 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
Proteus Код: plaintext Ну-ну Вернее, мысль-то правильная, на application server об этом надо позаботиться. Но предложение... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2010, 16:56 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous, Ну, я не владею, серверами приложений и от косяков не застрахован. Где там нужно прикрутить кодировку не знаю, но для того чтобы пропихнуть данные в нужной кодировке через SQL+ поступал именно так. Так что не обессудьте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2010, 17:06 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
Proteusдля того чтобы пропихнуть данные в нужной кодировке через SQL+ поступал именно так. Так что не обессудьте. Поступать Вы вольны как угодно, но... Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2010, 17:21 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
Max13через Ajax->Apache->Application Server процедура pl/sql на сервере, у которой в качестве параметра та самая строка А все остальные данные (в смысле human-readable) у вас в 1251? Если так, конвертите средствами Явы перед вызовом процедуры, и не парьте себе и людям мозги. Кстати, лезть на сервера в Европе с клиента тоже бред еще тот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2010, 17:29 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
alter session уже смотрел - понял что нет такого там. SQL+ больно сложно еще привязывать сюда. Application Server - вариант, но где и как не пойму. Если на клиенте, то что-то не помогает: httpRequest.setRequestHeader("Content-Type", "text/xml;charset=UTF-8"); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2010, 17:48 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
wildwindMax13через Ajax->Apache->Application Server процедура pl/sql на сервере, у которой в качестве параметра та самая строка А все остальные данные (в смысле human-readable) у вас в 1251? Если так, конвертите средствами Явы перед вызовом процедуры, и не парьте себе и людям мозги. А яваскриптом то разве можно что-то скорвертить? Я ничего в инете на эту тему не нашел. Конверт я уже и на pl/sql сделал благодаря Elic. Все работает. Сейчас просто спортивный интерес уже заставить все работать без всяких конвертаций. А мозг я никому не парю... wildwind[quot Max13]Кстати, лезть на сервера в Европе с клиента тоже бред еще тот. Когда другого варианта нет - ничего не поделаешь. Я же говорю - ORDCOM отказывается работать. Писать приложение на каком-нить С++ на сервере и потом с базой обмениваться через файлы итд итп еще хуже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2010, 17:59 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousProteusдля того чтобы пропихнуть данные в нужной кодировке через SQL+ поступал именно так. Так что не обессудьте. Поступать Вы вольны как угодно, но... Код: plaintext 1. 2. 3. 4. да, да это я дурку прогнал. все было почти так но по другому :) Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2010, 19:57 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
max13А яваскриптом то разве можно что-то скорвертить? А я где-то писал про яваскрипт? App. server на чем у вас? wildwindMax13Кстати, лезть на сервера в Европе с клиента тоже бред еще тот. Когда другого варианта нет - ничего не поделаешь. Я сильно сомневаюсь, что вы рассмотрели другие варианты, не то что попробовали. Протокол обмена с Европой - секретный? Наверняка обычный веб-сервис. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2010, 00:36 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
wildwindА я где-то писал про яваскрипт? App. server на чем у вас? Что имеется в виду под "на чем"? Если язык - то PL/SQL. wildwindЯ сильно сомневаюсь, что вы рассмотрели другие варианты, не то что попробовали. Протокол обмена с Европой - секретный? Наверняка обычный веб-сервис. Понимаете, дается DLL-ка, есть инструкция как запустить в ней функцию, которая что-то возвращает. Каким образом она это делает и где берет данные вообще неважно, но написана эта DLL-ка частной организацией для получения доступа к своей БД в европе, не думаю что там используется какой-то всем известный протокол. Главное как-то запустить и получить результат. А это работа с COM-объектом и ничего более. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2010, 22:50 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
max13Если язык - то PL/SQL. в смысле mod_plsql обрабатывает все запросы с клиентов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2010, 23:06 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
max13wildwindА я где-то писал про яваскрипт? App. server на чем у вас? Что имеется в виду под "на чем"? Если язык - то PL/SQL. wildwindЯ сильно сомневаюсь, что вы рассмотрели другие варианты, не то что попробовали. Протокол обмена с Европой - секретный? Наверняка обычный веб-сервис. Понимаете, дается DLL-ка, есть инструкция как запустить в ней функцию, которая что-то возвращает. Каким образом она это делает и где берет данные вообще неважно, но написана эта DLL-ка частной организацией для получения доступа к своей БД в европе, не думаю что там используется какой-то всем известный протокол. Главное как-то запустить и получить результат. А это работа с COM-объектом и ничего более. Много лишних букв и ненужных подробностей. Сохраните в блоб или клоб результат и работайте с ним уже, вот и потерялся в постановке ваш объект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2010, 23:33 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
я так понял, что это чтото вроде веб-сервиса? по крайней мере данные приходят в виде xml? тогда в чем вопрос? :) данные и должны быть в utf-8, эти данные ваш обработчик и должен обрабатывать в utf-8, для отображения результат конвертировать в необходимую вам кодировку. Имхо, если приходится такие данные конвертировать - гдето ошибка в бизнес-процессах, или в реализации. Вероятно, Вам следует обратить внимание на встроенные в пл/скл операторы, специально предназначенные для работы с деревьями (xml парсеры). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2010, 16:20 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
Кто-то немного знакомый с дельфи Много лишних букв и ненужных подробностей. Сохраните в блоб или клоб результат и работайте с ним уже, вот и потерялся в постановке ваш объект. По другому если не объяснить народу почему я так делаю, вот и пришлось на 3-й раз все подробно расписать. через блоб уже реализовал, все работает. wildwindв смысле mod_plsql обрабатывает все запросы с клиентов? да, все напрямую с pl/sql как-то, наверно тот самый mod_plsql. Не я честно говоря настраивал. Но точно явы там нет. wildwindВероятно, Вам следует обратить внимание на встроенные в пл/скл операторы, специально предназначенные для работы с деревьями (xml парсеры). именно так и делаю, и я писать, что пытался через dbms_xmlparser что-то сделать с кодировкой, но ничего там не нашел. А без конвертации он выводит ошибки. В принципе это и логично. В чем база настроена, в том он и пытается обработать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2010, 21:43 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
Как-то писал соап-клиента для парсинга валют с сайта ЦБ-РФ. Вырезал наиболее ценное, покопайся, может поможет. Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2010, 11:33 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
chameleon82Как-то писал соап-клиента для парсинга валют с сайта ЦБ-РФ. Вырезал наиболее ценное, покопайся, может поможет. Ага, спасибо. С курсами ЦБ знаком, но это не тот случай, к сожалению. Технология запуска другая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2010, 12:47 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
Elicmax13как dbms_lob'у можно сказать что у меня в CLOB сидит UTF8 при том, что NLS_CHARACTERSET = CL8MSWIN1251. Код: plaintext 1. Спасибо! У меня ситуация диаметрально противоположная: база в AL32UTF8, в blob поле текст сохраняется через toad/plsql developer c кодировкой CL8MSWIN1251. Когда читал blob поле при помощи dbms_lob.converttoclob то база думала что данные в AL32UTF8, и выдавала ??? вместо русского текста. Явно указав при помощи NLS_CHARSET_ID, что в blob-e лежит текст в CL8MSWIN1251 помогло решить проблему: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2010, 12:24 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
Elicmax13как dbms_lob\'у можно сказать что у меня в CLOB сидит UTF8 при том, что NLS_CHARACTERSET = CL8MSWIN1251.10g Код: plsql скажите, а почему Элик в .CONVERTTOBLOB передал сначала параметр blob_csid =>0, а в только затем в DBMS_LOB.CONVERTTOCLOB - нужную кодировку blob_csid =>NLS_CHARSET_ID (\'UTF8\') ? почему сразу не передавать ту кодировку, в которую хотим перекодировать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2017, 12:20 |
|
||
|
CLOB UTF8 -> WIN1251
|
|||
|---|---|---|---|
|
#18+
Elic показывает, как можно работать с кодировками. Ньюанс - показывает "для тех, кто понял". Ибо много оставлено за кадром. Хинт: пререквизитом для правильного понимания этого примера является вдумчивое прочтение Globalization Support Guide. Критерий осознания: суметь ответить на вопрос "а в какой, собственно, кодировке результат скрипта получен клиентом?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2017, 20:43 |
|
||
|
|

start [/forum/topic.php?all=1&fid=52&tid=1884648]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
144ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 442ms |

| 0 / 0 |
