Гость
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Вывести текст в исходной кодировке / 2 сообщений из 2, страница 1 из 1
27.06.2011, 14:21
    #37325885
SvUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести текст в исходной кодировке
Кодировка Oracle Database CL8MSWIN1251
Кодировка Oracle HTTP Server UTF8

Задача такая.
Нужно вывести часть данных на страницу в UTF8, а часть в CL8MSWIN1251.
Теоретически подошел бы convert( text, 'CL8MSWIN1251', 'UTF8'), но не работает.
Нужно каким-то образом обойти преобразование текста в 'UTF8' при выводе.
Теоретически, apex умеет выдавать файлы без преобразования кодировок, значит и текст может, какой-нибудь функцией, типа htp.p.

Такая вот задачка. Идеи?
...
Рейтинг: 0 / 0
28.06.2011, 17:19
    #37327642
SvUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести текст в исходной кодировке
Так и не удалось найти готовых решений и ответов, расковырял сам.

Есть некие домыслы, описанной работы в доках не удалось найти.
Я так понял, пакеты htp.p и owa_util, формируют некий буфер, содержащий ответ на запрос определенной страницы.
Далее Oracle HTTP Server считывает этот буфер, запускает магический скрипт преобразования его в utf8 и выдаёт в ответ пользователю.
Есть еще пакет WPG_DOCLOAD, предназначенный для загрузки файлов в исходной кодировке. Вызывается WPG_DOCLOAD.download_file, который сохраняет данные в своём буфере.
Так вот Oracle HTTP Server сначало проверяет буфер из WPG_DOCLOAD, и если он не пустой, то запускает другой магический скрипт, уже без преобразования utf8.

Получается, что без магических скриптов никак, и либо их искать и править, либо использовать WPG_DOCLOAD.download_file

После некоторых мутарств, удалось таки заставить его работать:
Код: 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.
declare
   p_str_clob clob;
   p_str_blob blob;

   dest_offset NUMBER :=  1 ;
   src_offset NUMBER :=  1 ;
   amount INTEGER := dbms_lob.lobmaxsize;
   blob_csid NUMBER := dbms_lob.default_csid;
   lang_ctx INTEGER := dbms_lob.default_lang_ctx;
   warning INTEGER;
begin
  select 'русский текст (CL8MSWIN1251)<br>' || 
          convert( 'русский текст (UTF8)', 'UTF8' )
  into p_str_clob 
  from dual;

  DBMS_LOB.CREATETEMPORARY(lob_loc=>p_str_blob, cache=>TRUE);
  DBMS_LOB.CONVERTTOBLOB( p_str_blob, p_str_clob, amount,dest_offset,src_offset,blob_csid,lang_ctx,warning );

  OWA_UTIL.MIME_HEADER( 'text/html', false, 'UTF8' );
  HTP.p ('Content-length: ' || DBMS_LOB.getlength( p_str_blob ) );
  OWA_UTIL.http_header_close;

  WPG_DOCLOAD.download_file( p_str_blob );
end;

Теперь дело за малым, пихнуть в ondemand процесс, и запрашивать аяксом.
0_0
...
Рейтинг: 0 / 0
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Вывести текст в исходной кодировке / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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