Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 UTF-8 to ANSI  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 753
здравствуйте,
как выгружаемый файл сохранить в кодировке ANSI место UTF8
PROCEDURE Ibank_txt IS
 
BEGIN
 owa_util.mime_header( 'text/csv', FALSE );  ---text/plain
htp.p('Content-Disposition: attachment; filename="ibank.txt"');
owa_util.http_header_close;

 htp.print('1CClientBankExchange' || chr(13) || chr(10));
 htp.print('ВерсияФормата=1.01' || chr(13) || chr(10));
 htp.print('Кодировка=Windows' || chr(13) || chr(10));
 htp.print('СекцияДокумент=Платежное поручение' || chr(13) || chr(10));
 htp.print('Номер='||i.documentnumber || chr(13) || chr(10));
 htp.print('Дата='||to_char(i.value_date,'DD.MM.YY')|| chr(13) || chr(10));
 htp.print('Сумма='||i.amount || chr(13) || chr(10));
 htp.print('ПлательщикСчет='||i.sender_accountnumber || chr(13) || chr(10));
 htp.print('ПлательщикИНН=000000000' ||chr(13) || chr(10));
 htp.print('ПлательщикОКПО=0000000' || chr(13) || chr(10));
 htp.print('ПлательщикРег.№СФ=000000000' || chr(13) || chr(10));
 htp.print('Плательщик1=РОГА ИКОПЫТА' || chr(13) || chr(10));
 htp.print('ПлательщикБИК='||i.sender_bic || chr(13) || chr(10));
 htp.print('ПолучательСчет='||i.benef_accountnumber || chr(13) || chr(10));
 htp.print('ПолучательИНН='||i.inn || chr(13) || chr(10));
 htp.print('Получатель1='||i.client_short_name || chr(13) || chr(10));
 htp.print('ПолучательБИК='||i.benef_bic || chr(13) || chr(10));
 htp.print('СрокПлатежа='||to_char(i.value_date,'DD.MM.YY') || chr(13) || chr(10));
 htp.print('НазначениеПлатежа='||i.nomination || chr(13) || chr(10));
 htp.print('КодПлатежа='||i.knp_code || chr(13) || chr(10));
 htp.print('КонецДокумента'|| chr(13) || chr(10));

htmldb_application.g_unrecoverable_error := true;
END;
5 дек 17, 16:46    [21008142]     Ответить | Цитировать Сообщить модератору
 Re: UTF-8 to ANSI  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 753
еще момент когда применяю
|| chr(13) || chr(10))

между строками появляется пустая строка
если убираю то, с новой строки не начинается
надо сформировать вот в таком формате
1CClientBankExchange
ВерсияФормата=1.01
Кодировка=Windows
СекцияДокумент=Платежное поручение
Номер=12
Дата=01.12.17
Сумма=15000
ПлательщикСчет=99999999
ПлательщикИНН=0999999999
ПлательщикОКПО=21999999
ПлательщикРег.№СФ=999999
Плательщик1=РОГА КОПЫТА
ПлательщикБИК=111111
ПолучательСчет=1111111111
ПолучательИНН=111111111
Получатель1=ПЕТРОВ
ПолучательБИК=12212
СрокПлатежа=01.12.17
НазначениеПлатежа=Перечисляется кредит согл КД 333 прот 333 от 24 11 17 Распр 06 23 149 от 30 11 17г
КодПлатежа=54545455
КонецДокумента
5 дек 17, 16:53    [21008171]     Ответить | Цитировать Сообщить модератору
 Re: UTF-8 to ANSI  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10763
Есть два варианта обозначения конца строки (EBCDIC, старые макинтошы и print formatter MultiEdit - не рассматриваем):
1. "юниксоидный" - одиночный перевод строки (LF);
2. "канонический" - пара CRLF (в этом порядке).
Любая система может "что-то сделать" с "несистемным" вариантом конца строки. Например, "юниксоидные" могут интерпретировать CRLF как LFLF.
Поэтому определяемся с вариантом исходя из требований ("пожеланий") целевой системы, для которой готовится файл.

P.S. Чтобы не раздражало при просмотре - делаем настройку софта, если она есть или используем другой просмотровщик.
5 дек 17, 17:13    [21008250]     Ответить | Цитировать Сообщить модератору
 Re: UTF-8 to ANSI  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 753
убрал
|| chr(10)

исчезла пустая строка
5 дек 17, 17:33    [21008316]     Ответить | Цитировать Сообщить модератору
 Re: UTF-8 to ANSI  [new]
AmKad
Member

Откуда:
Сообщений: 5222
Бакыт
еще момент когда применяю
|| chr(13) || chr(10))
Уточняй у стороны-приемника какой разделитель строк она ожидает. Вынеси выделенный фрагмент в переменную/константу/параметр. Для преобразования кодировок есть dbms_lob.converttoblob и utl_i18n.string_to_raw.
5 дек 17, 17:58    [21008397]     Ответить | Цитировать Сообщить модератору
 Re: UTF-8 to ANSI  [new]
Леонид_Кудрявцев
Guest
Бакыт,

Мне кажется, было бы лучше убрать chr(13) и оставить chr(10)

IMHO & AFAIK
5 дек 17, 18:48    [21008532]     Ответить | Цитировать Сообщить модератору
 Re: UTF-8 to ANSI  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 753
Леонид_Кудрявцев
Бакыт,

Мне кажется, было бы лучше убрать chr(13) и оставить chr(10)

IMHO & AFAIK

chr(10) не реагирует
5 дек 17, 19:46    [21008623]     Ответить | Цитировать Сообщить модератору
 Re: UTF-8 to ANSI  [new]
htp.print
Guest
описание функции поцмотреть не судьба?

PRINT Procedures

These procedures generate the specified parameter as a string terminated with the \n newline character. The PRN Procedures performs the same operation but does not terminate with a newline character.
6 дек 17, 12:43    [21010482]     Ответить | Цитировать Сообщить модератору
 Re: UTF-8 to ANSI  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 753
htp.print
описание функции поцмотреть не судьба?

PRINT Procedures

These procedures generate the specified parameter as a string terminated with the \n newline character. The PRN Procedures performs the same operation but does not terminate with a newline character.

что имеете ввиду?
6 дек 17, 13:26    [21010698]     Ответить | Цитировать Сообщить модератору
 Re: UTF-8 to ANSI  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 753
делаю
CONVERT('СТРОКА','CL8MSWIN1251','RU8PC866' )
from dual

кодировка ANSI только теперь буквы "кряказяба"
6 дек 17, 13:28    [21010704]     Ответить | Цитировать Сообщить модератору
 Re: UTF-8 to ANSI  [new]
Кодеррр
Guest
Бакыт
делаю
CONVERT('СТРОКА','CL8MSWIN1251','RU8PC866' )
from dual

кодировка ANSI только теперь буквы "кряказяба"

Ждал какого-то другого результата от двойной перекодировки?
6 дек 17, 16:37    [21011785]     Ответить | Цитировать Сообщить модератору
 Re: UTF-8 to ANSI  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9250
Попытался поискать определения термина "ANSI codepage". Сложилось такое чувство, что за исключением 7-битной кодировки, вроде к существующим кодировкам ANSI имеет отношение чуть меньше, чем никакое

Но в 90-ые ANSI кодировкой для России называли исключительно 1251
А 866 кодировку называли OEM )))

IMHO по ощущениям после прочтения англоязычной Wiki )))
и AFAIK по программированию в 90'ые )))

WIKI
The phrase ANSI character set has no official meaning and has been used to refer to the following, among other things:
Windows code pages, a collection of 8-bit character sets compatible with ASCII but incompatible with each other, especially those code pages that are partly compatible with ISO-8859, most commonly Windows Latin 1
ASCII, a 7-bit character set. (Very rarely.)
ANSEL, the American National Standard for Extended Latin Alphabet Coded Character Set. (Very rarely.)
ISO-8859, a collection of 8-bit character sets compatible with ASCII. (Very rarely.)
6 дек 17, 18:36    [21012439]     Ответить | Цитировать Сообщить модератору
 Re: UTF-8 to ANSI  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10763
Leonid Kudryavtsev
Попытался поискать определения термина "ANSI codepage".
В MSDN не пробовали заглядывать?
6 дек 17, 18:49    [21012500]     Ответить | Цитировать Сообщить модератору
 Re: UTF-8 to ANSI  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 753
пока незнаю как реализовать выгрузку сразу в ANSI , решил использовать вот эту утилитку http://www.softportal.com/get-21021-konverter-ansiutf-8.html
6 дек 17, 18:56    [21012512]     Ответить | Цитировать Сообщить модератору
 Re: UTF-8 to ANSI  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9250
Basil A. Sidorov
MSDN не пробовали заглядывать?

там тоже самое )))

866 cp866 OEM Russian; Cyrillic (DOS)
1251 windows-1251 ANSI Cyrillic; Cyrillic (Windows)

и хорошо согласуется с англоязычной викой "Windows code pages, a collection of 8-bit character sets compatible with ASCII but incompatible with each other, especially those code pages that are partly compatible with ISO-8859, most commonly Windows Latin 1"

Какое отношение к ним имеет ANSI (https://www.ansi.org/) совершенно не понятно.
6 дек 17, 20:07    [21012657]     Ответить | Цитировать Сообщить модератору
 Re: UTF-8 to ANSI  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10763
Leonid Kudryavtsev
Какое отношение к ним имеет ANSI
Насколько я помню историю, ANSI (и не только он) не рекомендовал, например, использовать первые тридцать два кода из диапазона 128-159. CP1251 (ANSI) эту рекомендацию соблюдает, CP866 (OEM) - нет.
6 дек 17, 23:18    [21013090]     Ответить | Цитировать Сообщить модератору
 Re: UTF-8 to ANSI  [new]
AmKad
Member

Откуда:
Сообщений: 5222
Бакыт
пока незнаю как реализовать выгрузку сразу в ANSI , решил использовать вот эту утилитку http://www.softportal.com/get-21021-konverter-ansiutf-8.html
Да что за инструмент этот ваш оракл, если не поддерживает выгрузки в различных кодировках и приходится использовать сторонние приблуды? А еще промышленной бд зовется.
7 дек 17, 08:27    [21013468]     Ответить | Цитировать Сообщить модератору
 Re: UTF-8 to ANSI  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9250
Возвращаясь к первым двум вопросам:

1. Кодировка:

1.1. ПРАВИЛЬНОЕ использование ф-ции CONVERT, скорее всего ( 95% ), спасет гиганта мысли. Какие параметры нужно указывать, зависит от кодировки используемой в Вашей БД

1.2. Желательно указывать правильный тип и кодировку в Mime Type (третий параметр в owa_util.mime_header )

2. Перевод строки

21010482
Если Вы сами формируете переводы строки, но лучше использовать ф-цию которые ничего не пытаются добавлять. А то у Вас получается масло масленное. Сначала Вы добавили переводы строки, которые считаете правильными, а потом еще Oracle добавил свои. Что получилось в итоге, понять достаточно сложно )))

IMHO
7 дек 17, 15:20    [21015414]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить