powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Конвертирование Clob из UTF8 в CP866
15 сообщений из 15, страница 1 из 1
Конвертирование Clob из UTF8 в CP866
    #37875147
electrod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.

Знаю, что тема уже обсуждалась много раз, но так и не получается ничего реализовать исходя из кучи прочитанных тем.
Задача - есть CLOB в AL32UTF8 (база в той же кодировке).
Нужно получить CLOB (или BLOB) в кодировке RU8PC866
Через CONVERT конечно же не работает.

Последняя версия скрипта перекодировки:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
  FUNCTION ConvertClob(sInp IN CLOB, dest_char_set IN VARCHAR2, source_char_set IN VARCHAR2) RETURN CLOB AS
      sOut              CLOB;
      nPos              PLS_INTEGER := 0;
      nLen              PLS_INTEGER;
      nLength           PLS_INTEGER := LENGTH(sInp);
    BEGIN
     WHILE nLength>nPos LOOP
       nLen := INSTR(sInp, CHR(10), nPos + 4000);
       IF nLen=0 THEN
         nLen := nLength;
       END IF;
       --sOut := sOut || utl_raw.cast_to_varchar2(UTL_RAW.Convert(DBMS_LOB.SUBSTR(sInp,nPos+1,nLen-nPos),'AMERICAN_AMERICA.RU8PC866', 'AMERICAN_AMERICA.AL32UTF8'));
       sOut := sOut||CONVERT(TO_CHAR(SUBSTR(sInp,nPos+1,nLen-nPos)), 'RU8PC866');
       nPos := nLen;
     END LOOP;
     RETURN sOut;
  END;



Код: plsql
1.
sOut := sOut || utl_raw.cast_to_varchar2(UTL_RAW.Convert(DBMS_LOB.SUBSTR(sInp,nPos+1,nLen-nPos),'AMERICAN_AMERICA.RU8PC866', 'AMERICAN_AMERICA.AL32UTF8'));

- если раскомментировать эту строку то пишется ошибка
Код: plsql
1.
ORA-06502: PL/SQL: : ошибка преобразования из raw в шестнадцатеричное ошибка числа или значения



Добавление TO_MUTLY_CHAR так же не помогает.

Пытаемся пробовать на строке v_clob := 'Привет:::Пока';
С CONVERT строка превращается вообще в одни непонятные символы, с моей функцией - двоиточия остаются, русский переводится в непонятные символы...

Помогите, пожалуйста! Уже 2 дня тупим :)
...
Рейтинг: 0 / 0
Конвертирование Clob из UTF8 в CP866
    #37875163
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
electrodЗадача - есть CLOB в AL32UTF8 (база в той же кодировке).
Нужно получить CLOB (или BLOB) в кодировке RU8PC866

CONVERTTOBLOB
...
Рейтинг: 0 / 0
Конвертирование Clob из UTF8 в CP866
    #37875168
electrod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А поподробнее.

Блоб открывается в utf8 как и записывался. Параметра же нет, в какую кодировку писать.
...
Рейтинг: 0 / 0
Конвертирование Clob из UTF8 в CP866
    #37875170
Обломинго
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
electrodCLOB в AL32UTF8 (база в той же кодировке ). 9108091
...
Рейтинг: 0 / 0
Конвертирование Clob из UTF8 в CP866
    #37875171
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
electrod,

Надо смотреть внимательнее, в том числе описание к параметрам.
...
Рейтинг: 0 / 0
Конвертирование Clob из UTF8 в CP866
    #37875190
electrod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Только проблема в том, что и база и клоб в UTF8
А нужно выгрузить CP866.

Пробовал так:

Код: plsql
1.
2.
v_clob_convert := convert('Привет:::Пока', 'RU8PC866');
v_blob := clob_to_blob(v_clob_convert);



где
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
function clob_to_blob (p_clob in clob) return blob
    as
     l_blob          blob;
     l_dest_offset   integer := 1;
     l_source_offset integer := 1;
     l_lang_context  integer := DBMS_LOB.DEFAULT_LANG_CTX;
     l_warning       integer := DBMS_LOB.WARN_INCONVERTIBLE_CHAR;
    BEGIN
      DBMS_LOB.CREATETEMPORARY(l_blob, true);
      DBMS_LOB.CONVERTTOBLOB
      (
       dest_lob    =>l_blob,
       src_clob    =>p_clob,
       amount      =>DBMS_LOB.LOBMAXSIZE,
       dest_offset =>l_dest_offset,
       src_offset  =>l_source_offset,
       blob_csid   =>DBMS_LOB.DEFAULT_CSID,
       lang_context=>l_lang_context,
       warning     =>l_warning
      );
      return l_blob;
    END;



Далее открывал блоб и смотрел что получилось - тоже самое что и при обычном CONVERT. т.е. смысла в v_blob := clob_to_blob(v_clob_convert); нет.
...
Рейтинг: 0 / 0
Конвертирование Clob из UTF8 в CP866
    #37875200
electrod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все !! большое спасибо

blob_csid =>NLS_CHARSET_ID ('RU8PC866'), !!
...
Рейтинг: 0 / 0
Конвертирование Clob из UTF8 в CP866
    #37875219
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
electrodТолько проблема в том, что и база и клоб в UTF8
А нужно выгрузить CP866.

А выставить NLS_LANG в RU8CP866 мешает что?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Конвертирование Clob из UTF8 в CP866
    #37875575
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
electrodТолько проблема в том, что и база и клоб в UTF8
А нужно выгрузить CP866.
Для этого не требуется никаких функций перекодировки.
Достаточно установить на клиенте, проводящем выгрузку, NLS_LANG в .RU8PC866
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Конвертирование Clob из UTF8 в CP866
    #39577079
скажите, а вот у меня writetoclob взял и сделал clob в кодировке базы win1251,

а мне надо utf-8

во-первых, я указал writetoclob (док, докклоб, 'UTF-8')

получил файл, а как посмотреть, какая кодировка у файла ? может, уже сейчас все норм

а если не норм, то правильно понимаю, что нужно сделать инсинуацию,
1) DBMS_LOB.CONVERTTOBLOB(dest_lob => vBlob,
src_clob => fXml,
amount => DBMS_LOB.LOBMAXSIZE,
dest_offset => l_dest_offset,
src_offset => l_source_offset,
blob_csid => NLS_CHARSET_ID('UTF8'), -- 0,
lang_context => l_lang_context,
warning => l_warning);
2) DBMS_LOB.CONVERTTOCLOB(dest_lob => vClob,
src_blob => vBlob,
amount => DBMS_LOB.LOBMAXSIZE,
dest_offset => l_dest_offset,
src_offset => l_source_offset,
blob_csid => NLS_CHARSET_ID('UTF8'),
lang_context => l_lang_context,
warning => l_warning);

что-то у меня все какое-то '???' выходит

и как программно или вручную посмотреть кодировку полученного файла наверняка ?
...
Рейтинг: 0 / 0
Конвертирование Clob из UTF8 в CP866
    #39577134
посмотрела кодировку через word

в инете везде пишут черным по белому

1) DBMS_LOB.CONVERTTOBLOB(dest_lob => vBlob,
src_clob => fXml,
amount => DBMS_LOB.LOBMAXSIZE,
dest_offset => l_dest_offset,
src_offset => l_source_offset,
blob_csid => NLS_CHARSET_ID('UTF8'), -- 0,
lang_context => l_lang_context,
warning => l_warning);
2) DBMS_LOB.CONVERTTOCLOB(dest_lob => vClob,
src_blob => vBlob,
amount => DBMS_LOB.LOBMAXSIZE,
dest_offset => l_dest_offset,
src_offset => l_source_offset,
blob_csid => NLS_CHARSET_ID('UTF8'),
lang_context => l_lang_context,
warning => l_warning);

но получаются '???' и word еще показывает, что это windows-1251
...
Рейтинг: 0 / 0
Конвертирование Clob из UTF8 в CP866
    #39577140
convert()
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДобрыйМакспосмотрела кодировкуТы трансгендер, Максимка?
...
Рейтинг: 0 / 0
Конвертирование Clob из UTF8 в CP866
    #39577142
convert()ДобрыйМакспосмотрела кодировкуТы трансгендер, Максимка?

а по теме есть ответ?

или только к опечаткам решил попридираться ?
...
Рейтинг: 0 / 0
Конвертирование Clob из UTF8 в CP866
    #39577144
convert() все ругают вообще-то

толлько для маленьких клобов
...
Рейтинг: 0 / 0
Конвертирование Clob из UTF8 в CP866
    #39577146
уороче , я не знаю,

тип, который писал пакеты, зачем-то претворил такую схему инсинуаций:
1) writetoclob
2) дале извращенно конвертил в blob в другом конце другого пакета ваще в blob и после этого писал только в таблицу для выгрузки. Больше функцию преобразования xml в clob нигде не использовал и мне непонятно, почему ВСЕ действия по преобразованию документа нельзя было отразить в одной функции , а раскидать блен по всем пакетам. В итоге я доблестно конвертил из клоба в блоб и затем из блоба в клоб в нужной кодировке. а В другом пакете чувак снова переводил в блоб тупо нарезанием и dbms_lob.writeAppend и сбивал мне всю кодировку опять

ну ваще

сейчас вроде word показывает utf-8


ну если я опять нигде не затормозил
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Конвертирование Clob из UTF8 в CP866
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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