powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / CLOB UTF8 -> WIN1251
35 сообщений из 35, показаны все 2 страниц
CLOB UTF8 -> WIN1251
    #36741399
max13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть CLOB в UTF8, необходимо сконвертировать в WIN1251.
Стандартный Convert работает, но только со строками до 32к.
Искал в форуме - в основном задача стоит WIN1251->UTF8 и вроде бы можно по частям, но в моем случае с исходным UTF8 не определить на какие части нужно делить строку.
Может кто-то знает правильное решение данной проблемы?
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36741841
wildwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max13в моем случае с исходным UTF8 не определить на какие части нужно делить строку Неправда ваша. Методы пакета dbms_lob прекрасно определяют.
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36742328
max13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно поподробнее? Плохо представляю как 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='вет!'
?
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36742539
chameleon82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько я знаю, утф-8 шифрует данные толи по 4, толи по 2 байта. делите длину строки кратно 4 и нет проблем :)
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36742559
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chameleon82Насколько я знаю, утф-8 шифрует данные толи по 4, толи по 2 байта.
- UTF8 не шифрует данные
- codepoint в UTF8 может быть представлен цепочкой байт длиной от 1 до 6.
За подробностями - на unicode.org.

2TC: Установите на клиенте NLS_LANG=.CL8MSWIN1251, выгрузите CLOB в файл(ы), смените NLS_LANG на .UTF8 и загрузите обратно.
Oracle Developer и прочие java-тулзы для операции не подойдут, нужно что-то с поддержкой монобайта - sql*plus, например.
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36742680
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max13как dbms_lob\'у можно сказать что у меня в CLOB сидит UTF8 при том, что NLS_CHARACTERSET = CL8MSWIN1251.10g
Код: plaintext
declare\n  c clob;\n  b blob;\n  c2 clob;\n  l_dest_offset   integer :=  1 ;\n  l_source_offset integer :=  1 ;\n  l_lang_context  integer := DBMS_LOB.DEFAULT_LANG_CTX;\n  l_warning       integer := DBMS_LOB.WARN_INCONVERTIBLE_CHAR;\nBEGIN\n  c := convert(\'Привет!\', \'utf8\');\n  dbms_output.put_line(c);\n  DBMS_LOB.CREATETEMPORARY(b, TRUE);\n  DBMS_LOB.CONVERTTOBLOB\n  (\n   dest_lob    =>b,\n   src_clob    =>c,\n   amount      =>DBMS_LOB.LOBMAXSIZE,\n   dest_offset =>l_dest_offset,\n   src_offset  =>l_source_offset,\n   blob_csid   => 0 ,\n   lang_context=>l_lang_context,\n   warning     =>l_warning\n  );\n  l_dest_offset   :=  1 ;\n  l_source_offset :=  1 ;\n  l_lang_context  := DBMS_LOB.DEFAULT_LANG_CTX;\n  DBMS_LOB.CREATETEMPORARY(c2, TRUE);\n  DBMS_LOB.CONVERTTOCLOB\n  (\n   dest_lob    =>c2,\n   src_blob    =>b,\n   amount      =>DBMS_LOB.LOBMAXSIZE,\n   dest_offset =>l_dest_offset,\n   src_offset  =>l_source_offset,\n   blob_csid   =>NLS_CHARSET_ID (\'UTF8\'),\n   lang_context=>l_lang_context,\n   warning     =>l_warning\n  );\n  c := c2;\n  dbms_output.put_line(c);\nend;\n/\n\nР_С_РёР_РчС\'!\nПривет!\n\nPL/SQL procedure successfully completed.
При многобайтном NLS_CHARACTERSET фокус, насколько я понимаю, не удастся.
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36742841
max13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous:
вариант интересный, хотя с реализацией проблема :)

Elic:
действительно работает, 100к символов уже сконвертил! я пытался что-то подобное соорудить, но безрезультатно, не хватало ключевой строки: blob_csid =>NLS_CHARSET_ID ('UTF8')

Спасибо всем!
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36743387
wildwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max13у меня в CLOB сидит UTF8 при том, что NLS_CHARACTERSET = CL8MSWIN1251. Это другое дело. А как вы это получили?
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36744692
max13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wildwindЭто другое дело. А как вы это получили?
Да, извиняюсь, сразу не написал про настройку базы.
Текст в UTF8 поступает от внешнего средства ("черного ящика") посредством COM-объектов и падает в CLOB.
Кстати в нем XML и была даже мысль на уровне dbms_xmlparser как-то конвертировать, но что-то я ничего по теме в нем не нашел.
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36745104
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max13Текст в UTF8 поступает от внешнего средства ("черного ящика") посредством COM-объектов и падает в CLOB.
Измените настройки - COM-объекты, посредством которых данные попадают в базу, должны заявить кодировку, соответствующую данным, т.е. UTF8.
В этом случае перекодировка будет осуществляться автомагически.
Текущая настройка - cl8mswin1251 - неверна.
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36745244
max13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous
Измените настройки - COM-объекты, посредством которых данные попадают в базу, должны заявить кодировку, соответствующую данным, т.е. UTF8.
В этом случае перекодировка будет осуществляться автомагически.
Текущая настройка - cl8mswin1251 - неверна.
Конкретно данная задача составляет 0.1% от всей системы, и ради нее переводить всю базу на UTF8 неразумно.
Не очень понял насчет "В этом случае перекодировка будет осуществляться автомагически.". Если все будет в UTF8, то и перекодировка никакая не нужна ведь? или я чего-то не понял...
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36745252
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max13или я чего-то не понял...
Именно.
Globalization Support Guide в помощь.
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36745264
Proteus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max13,

Клиент, будь то COM или SQL+, не должен обманывать сервер о кодировке данных которые он запихивает в базу. Если твой COM сообщит о том что он собирается пихать UTF8 то при пересылке данных в базу которая в MSWIN1251 произойдет конвертация в кодировку базы.
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36745444
Max13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Proteusmax13,

Клиент, будь то COM или SQL+, не должен обманывать сервер о кодировке данных которые он запихивает в базу. Если твой COM сообщит о том что он собирается пихать UTF8 то при пересылке данных в базу которая в MSWIN1251 произойдет конвертация в кодировку базы.
Кажется начинаю понимаю о чем речь. Но в моем случае никакой клиент не пытается что-то вставить в базу Oracle. Наоборот - есть COM, который представляет собой черный ящик и умеет возвращать строку UTF8 (как он это делает, откуда берет данные я даже не представляю, знаю только как запустить). В результате после манипуляций с этим самым COM в pl/sql процедуре возникает строка UTF8, которую нужно конвертнуть, чтобы можно было обработать в базе.
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36745470
Proteus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не знаю как там COM не работал с ними. Но можно предположить что если строка появляется сама по себе то COM сам устанавливает соединение с базой. можно попробовать сменить значение NLS_LANG в реестре на *******_******.UTF8 того хоста на котором поднимается COM и посмотреть на результат, будет ли продолжать приходить UTF8 или в базе появится другая кодировка.
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36745564
Max13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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"'');
...
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36745601
Proteus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Следовательно в твою то базу кто закидывает строку? Твое приложение?
Тогда оно должно озаботится тем чтобы открытая сессия к базе данных получила ту кодировку в которой передает данные. Раз у тебя UTF8 так и укажи что у тебя UTF8.
Код: plaintext
alter session set NLS_LANGUAGE=*****.UTF8
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36745616
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Proteus
Код: plaintext
alter session set NLS_LANGUAGE=*****.UTF8

Ну-ну

Вернее, мысль-то правильная, на application server об этом надо позаботиться.
Но предложение...
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36745648
Proteus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

Ну, я не владею, серверами приложений и от косяков не застрахован. Где там нужно прикрутить кодировку не знаю, но для того чтобы пропихнуть данные в нужной кодировке через SQL+ поступал именно так.

Так что не обессудьте.
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36745689
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Proteusдля того чтобы пропихнуть данные в нужной кодировке через SQL+ поступал именно так. Так что не обессудьте.
Поступать Вы вольны как угодно, но...
Код: plaintext
1.
2.
3.
4.
SQL> alter session set NLS_LANGUAGE=AMERICAN_AMERICA.UTF8;
alter session set NLS_LANGUAGE=AMERICAN_AMERICA.UTF8
                                               *
ERROR at line  1 :
ORA- 00922 : missing or invalid option
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36745706
wildwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max13через Ajax->Apache->Application Server процедура pl/sql на сервере, у которой в качестве параметра та самая строка А все остальные данные (в смысле human-readable) у вас в 1251?
Если так, конвертите средствами Явы перед вызовом процедуры, и не парьте себе и людям мозги.

Кстати, лезть на сервера в Европе с клиента тоже бред еще тот.
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36745739
max13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alter session уже смотрел - понял что нет такого там.
SQL+ больно сложно еще привязывать сюда.
Application Server - вариант, но где и как не пойму. Если на клиенте, то что-то не помогает:
httpRequest.setRequestHeader("Content-Type", "text/xml;charset=UTF-8");
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36745763
max13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wildwindMax13через Ajax->Apache->Application Server процедура pl/sql на сервере, у которой в качестве параметра та самая строка А все остальные данные (в смысле human-readable) у вас в 1251?
Если так, конвертите средствами Явы перед вызовом процедуры, и не парьте себе и людям мозги.

А яваскриптом то разве можно что-то скорвертить? Я ничего в инете на эту тему не нашел.
Конверт я уже и на pl/sql сделал благодаря Elic. Все работает. Сейчас просто спортивный интерес уже заставить все работать без всяких конвертаций. А мозг я никому не парю...
wildwind[quot Max13]Кстати, лезть на сервера в Европе с клиента тоже бред еще тот.
Когда другого варианта нет - ничего не поделаешь. Я же говорю - ORDCOM отказывается работать. Писать приложение на каком-нить С++ на сервере и потом с базой обмениваться через файлы итд итп еще хуже.
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36745913
Proteus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousProteusдля того чтобы пропихнуть данные в нужной кодировке через SQL+ поступал именно так. Так что не обессудьте.
Поступать Вы вольны как угодно, но...
Код: plaintext
1.
2.
3.
4.
SQL> alter session set NLS_LANGUAGE=AMERICAN_AMERICA.UTF8;
alter session set NLS_LANGUAGE=AMERICAN_AMERICA.UTF8
                                               *
ERROR at line  1 :
ORA- 00922 : missing or invalid option


да, да это я дурку прогнал.

все было почти так но по другому :)
Код: plaintext
1.
2.
3.
4.
set nls_lang=american_america.utf8

sqlplus /nolog

...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36746100
wildwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max13А яваскриптом то разве можно что-то скорвертить?
А я где-то писал про яваскрипт? App. server на чем у вас?

wildwindMax13Кстати, лезть на сервера в Европе с клиента тоже бред еще тот.
Когда другого варианта нет - ничего не поделаешь. Я сильно сомневаюсь, что вы рассмотрели другие варианты, не то что попробовали. Протокол обмена с Европой - секретный? Наверняка обычный веб-сервис.
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36746709
max13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wildwindА я где-то писал про яваскрипт? App. server на чем у вас?
Что имеется в виду под "на чем"? Если язык - то PL/SQL.
wildwindЯ сильно сомневаюсь, что вы рассмотрели другие варианты, не то что попробовали. Протокол обмена с Европой - секретный? Наверняка обычный веб-сервис.
Понимаете, дается DLL-ка, есть инструкция как запустить в ней функцию, которая что-то возвращает. Каким образом она это делает и где берет данные вообще неважно, но написана эта DLL-ка частной организацией для получения доступа к своей БД в европе, не думаю что там используется какой-то всем известный протокол. Главное как-то запустить и получить результат. А это работа с COM-объектом и ничего более.
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36746724
wildwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max13Если язык - то PL/SQL. в смысле mod_plsql обрабатывает все запросы с клиентов?
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36746741
max13wildwindА я где-то писал про яваскрипт? App. server на чем у вас?
Что имеется в виду под "на чем"? Если язык - то PL/SQL.
wildwindЯ сильно сомневаюсь, что вы рассмотрели другие варианты, не то что попробовали. Протокол обмена с Европой - секретный? Наверняка обычный веб-сервис.
Понимаете, дается DLL-ка, есть инструкция как запустить в ней функцию, которая что-то возвращает. Каким образом она это делает и где берет данные вообще неважно, но написана эта DLL-ка частной организацией для получения доступа к своей БД в европе, не думаю что там используется какой-то всем известный протокол. Главное как-то запустить и получить результат. А это работа с COM-объектом и ничего более.

Много лишних букв и ненужных подробностей. Сохраните в блоб или клоб результат и работайте с ним уже, вот и потерялся в постановке ваш объект.
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36747124
chameleon82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я так понял, что это чтото вроде веб-сервиса? по крайней мере данные приходят в виде xml? тогда в чем вопрос? :) данные и должны быть в utf-8, эти данные ваш обработчик и должен обрабатывать в utf-8, для отображения результат конвертировать в необходимую вам кодировку. Имхо, если приходится такие данные конвертировать - гдето ошибка в бизнес-процессах, или в реализации. Вероятно, Вам следует обратить внимание на встроенные в пл/скл операторы, специально предназначенные для работы с деревьями (xml парсеры).
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36747261
Max13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто-то немного знакомый с дельфи
Много лишних букв и ненужных подробностей. Сохраните в блоб или клоб результат и работайте с ним уже, вот и потерялся в постановке ваш объект.
По другому если не объяснить народу почему я так делаю, вот и пришлось на 3-й раз все подробно расписать.
через блоб уже реализовал, все работает.
wildwindв смысле mod_plsql обрабатывает все запросы с клиентов?
да, все напрямую с pl/sql как-то, наверно тот самый mod_plsql. Не я честно говоря настраивал. Но точно явы там нет.
wildwindВероятно, Вам следует обратить внимание на встроенные в пл/скл операторы, специально предназначенные для работы с деревьями (xml парсеры).
именно так и делаю, и я писать, что пытался через dbms_xmlparser что-то сделать с кодировкой, но ничего там не нашел. А без конвертации он выводит ошибки. В принципе это и логично. В чем база настроена, в том он и пытается обработать...
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36747701
chameleon82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как-то писал соап-клиента для парсинга валют с сайта ЦБ-РФ. Вырезал наиболее ценное, покопайся, может поможет.
Код: 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.
      pieces            UTL_HTTP.html_pieces;
      proxy_auth        VARCHAR2 ( 255 )       := proxy;
      l_clob            CLOB;
      l_parser          xmlparser.parser;
      xmldoc            xmldom.domdocument;
      valutenodeslist   xmldom.domnodelist;
      vl                xmldom.domelement;
      dn                xmldom.domnode;
BEGIN

      UTL_HTTP.set_body_charset ('windows-1251'); //  CHANGE TO UTF_8
      BEGIN
         pieces :=
            UTL_HTTP.request_pieces ('http://webservice/blablabla',  2000  );

         FOR i IN  1  .. pieces.COUNT
         LOOP
            l_clob := l_clob || pieces (i);
         END LOOP;
     END;

  l_parser := xmlparser.newparser;
  xmlparser.parseclob (l_parser, l_clob);

  valutenodeslist :=  xmldom.getelementsbytagname (xmldoc, 'ValuteCursOnDate');

  FOR i IN  0  .. xmldom.getlength (valutenodeslist) -  1 
  LOOP
            dn := xmldom.item (valutenodeslist, i);
            vl := xmldom.makeelement (dn);

    blablabla := xmldom.getnodevalue (xmldom.getfirstchild (xmldom.item (xmldom.getchildrenbytagname (vl, 'Vname'  ),   0   ) )  );
  END LOOP;
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #36747936
max13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chameleon82Как-то писал соап-клиента для парсинга валют с сайта ЦБ-РФ. Вырезал наиболее ценное, покопайся, может поможет.

Ага, спасибо. С курсами ЦБ знаком, но это не тот случай, к сожалению. Технология запуска другая.
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #37033526
Dev.l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elicmax13как dbms_lob'у можно сказать что у меня в CLOB сидит UTF8 при том, что NLS_CHARACTERSET = CL8MSWIN1251.

Код: plaintext
1.
   blob_csid   =>NLS_CHARSET_ID ('UTF8'),



Спасибо!

У меня ситуация диаметрально противоположная:
база в AL32UTF8,
в blob поле текст сохраняется через toad/plsql developer c кодировкой CL8MSWIN1251.

Когда читал blob поле при помощи dbms_lob.converttoclob то база думала что данные в AL32UTF8,
и выдавала ??? вместо русского текста.

Явно указав при помощи NLS_CHARSET_ID,
что в blob-e лежит текст в CL8MSWIN1251 помогло решить проблему:

Код: plaintext
1.
   blob_csid   =>NLS_CHARSET_ID ('CL8MSWIN1251'),
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
CLOB UTF8 -> WIN1251
    #39577354
Elicmax13как dbms_lob\'у можно сказать что у меня в CLOB сидит UTF8 при том, что NLS_CHARACTERSET = CL8MSWIN1251.10g
Код: plsql
\r\ndeclare\r\n  c clob;\r\n  b blob;\r\n  c2 clob;\r\n  l_dest_offset   integer := 1;\r\n  l_source_offset integer := 1;\r\n  l_lang_context  integer := DBMS_LOB.DEFAULT_LANG_CTX;\r\n  l_warning       integer := DBMS_LOB.WARN_INCONVERTIBLE_CHAR;\r\nBEGIN\r\n  c := convert(\'Привет!\', \'utf8\');\r\n  dbms_output.put_line(c);\r\n  DBMS_LOB.CREATETEMPORARY(b, TRUE);\r\n  DBMS_LOB.CONVERTTOBLOB\r\n  (\r\n   dest_lob    =>b,\r\n   src_clob    =>c,\r\n   amount      =>DBMS_LOB.LOBMAXSIZE,\r\n   dest_offset =>l_dest_offset,\r\n   src_offset  =>l_source_offset,\r\n   blob_csid   =>0,\r\n   lang_context=>l_lang_context,\r\n   warning     =>l_warning\r\n  );\r\n  l_dest_offset   := 1;\r\n  l_source_offset := 1;\r\n  l_lang_context  := DBMS_LOB.DEFAULT_LANG_CTX;\r\n  DBMS_LOB.CREATETEMPORARY(c2, TRUE);\r\n  DBMS_LOB.CONVERTTOCLOB\r\n  (\r\n   dest_lob    =>c2,\r\n   src_blob    =>b,\r\n   amount      =>DBMS_LOB.LOBMAXSIZE,\r\n   dest_offset =>l_dest_offset,\r\n   src_offset  =>l_source_offset,\r\n   blob_csid   =>NLS_CHARSET_ID (\'UTF8\'),\r\n   lang_context=>l_lang_context,\r\n   warning     =>l_warning\r\n  );\r\n  c := c2;\r\n  dbms_output.put_line(c);\r\nend;\r\n/\r\n\r\nР_С_РёР_РчС\'!\r\nПривет!\r\n\r\nPL/SQL procedure successfully completed.\r\n
\r\nПри многобайтном NLS_CHARACTERSET фокус, насколько я понимаю, не удастся.

скажите, а почему Элик в .CONVERTTOBLOB передал сначала параметр blob_csid =>0, а в только затем в DBMS_LOB.CONVERTTOCLOB - нужную кодировку blob_csid =>NLS_CHARSET_ID (\'UTF8\') ? почему сразу не передавать ту кодировку, в которую хотим перекодировать ?
...
Рейтинг: 0 / 0
CLOB UTF8 -> WIN1251
    #39577567
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic показывает, как можно работать с кодировками.
Ньюанс - показывает "для тех, кто понял".
Ибо много оставлено за кадром.
Хинт: пререквизитом для правильного понимания этого примера является вдумчивое прочтение Globalization Support Guide.
Критерий осознания: суметь ответить на вопрос "а в какой, собственно, кодировке результат скрипта получен клиентом?"
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / CLOB UTF8 -> WIN1251
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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