Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / UTF-8 to ANSI / 13 сообщений из 13, страница 1 из 1
12.12.2016, 11:37
    #39364762
Петров Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTF-8 to ANSI
Генерю CSV файл и аттачу его к письму по SMTP. Но он кракозябровый.
Когда открываю в нотпаде++ вижу кодировку UTF-8
Как преобразовать текст UTF-8 в ASCII?
Convert(fStr, 'US7ASCII', 'AL32UTF8'); не работает.
...
Рейтинг: 0 / 0
12.12.2016, 11:56
    #39364772
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTF-8 to ANSI
Петров АндрейГенерю CSV файл и аттачу его к письму по SMTP. Но он кракозябровый.
Когда открываю в нотпаде++ вижу кодировку UTF-8
Как преобразовать текст UTF-8 в ASCII?
Convert(fStr, 'US7ASCII', 'AL32UTF8'); не работает.

1) US7 - Получишь только '?'
( US7 , AL32 ) - количество бит на символ

2) Дефольная кодировка текстового письма, в общем случае не определена и зависит от кучи причин, правильнее воспользоваться MIME контейнером с указанием правильной кодировки
Но это совсем offtop для данной конференции

p.s. Почитай что такое кодировка символов и как формируется тело письма
...
Рейтинг: 0 / 0
12.12.2016, 16:54
    #39365088
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTF-8 to ANSI
Петров АндрейГенерю CSV файл и аттачу его к письму по SMTP. Но он кракозябровый.
Когда открываю в нотпаде++ вижу кодировку UTF-8
Как преобразовать текст UTF-8 в ASCII?
Convert(fStr, 'US7ASCII', 'AL32UTF8'); не работает.
Notepad++ как правило подбирает кодировку для интерпретации файла исходя из его содержимого. Если файл формируется посредством PL/SQL, то есть возможность явно указать кодировку целевого файла.

utl_i18n.string_to_raw , dbms_lob.converttoblob .
...
Рейтинг: 0 / 0
12.12.2016, 21:08
    #39365264
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTF-8 to ANSI
AmKadПетров АндрейГенерю CSV файл и аттачу его к письму по SMTP. Но он кракозябровый.
Когда открываю в нотпаде++ вижу кодировку UTF-8
Как преобразовать текст UTF-8 в ASCII?
Convert(fStr, 'US7ASCII', 'AL32UTF8'); не работает.
Notepad++ как правило подбирает кодировку для интерпретации файла исходя из его содержимого. Если файл формируется посредством PL/SQL, то есть возможность явно указать кодировку целевого файла.

utl_i18n.string_to_raw , dbms_lob.converttoblob .

Помимо кодировки, нужно еще чтобы mail client ее правильно отображал
...
Рейтинг: 0 / 0
13.12.2016, 11:32
    #39365565
Петров Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTF-8 to ANSI
А причем тут Mail клиент? Я же его сохраняю на диск...
Другое дело что в теле письма аттач выглядит вот так:

Код: plsql
1.
2.
3.
4.
5.
        fTmpBLOB2 BLOB;
        fBuffer RAW(5000);
Begin
fBuffer := Utl_RAW.cast_to_raw(Convert(aMailAttach(i), 'UTF8'));
                DBMS_LOB.WRITEAPPEND(fTmpBLOB2, Utl_Raw.length(fBuffer), fBuffer);



И далее:
Код: plsql
1.
2.
           utl_smtp.write_data(v_Mail_Conn, 'Content-Type: '||MAIL_PKG.attachments(x).mimetype||'; charset="utf-8"'|| crlf );
           utl_smtp.write_data(v_Mail_Conn, 'Content-Transfer-Encoding: base64'|| crlf );



Но оно блин зараза не отображается по человечески...
...
Рейтинг: 0 / 0
13.12.2016, 13:10
    #39365650
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTF-8 to ANSI
Петров АндрейА причем тут Mail клиент? Я же его сохраняю на диск...
...
Но оно блин зараза не отображается по человечески...

хм... не отображается ГДЕ?
И при чем здесь Oracle?

Это видел?
sql.ru FAQ Oracle Настройка и конфигурация
CodePage, NLS_LANG: решение проблем с отображением сообщений на русском языке
...
Рейтинг: 0 / 0
13.12.2016, 13:33
    #39365667
Петров Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTF-8 to ANSI
>> хм... не отображается ГДЕ?
В Excel

>> И при чем здесь Oracle?
Как причем? Аттач и письмо генерится в Oracle.

Поясню.
Аттач заполняется из базы следующим образом
Сначала данные забрасываются в коллекцию, после чего коллекция преобразуется в BLOB и далее аттачится к письму.

1) Забрасываем в коллекцию:
Код: plsql
1.
2.
3.
4.
5.
6.
                        fMail := Q.name || ';' ||
                                 Q.Address || ';' ||
                                 to_char(sysdate, 'DD.MM.YYYY') || ';' ||
                                 '' || ';' || Chr(13);
                         fAttachLog.Extend(1);
                         fAttachLog(fAttachLog.Last) := fMail;  



2) Формируем BLOB:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
        For i In aMailAttach.First .. aMailAttach.Last
        Loop
            If aMailAttach.Exists(i) Then
                fBuffer := Utl_RAW.cast_to_raw(Convert(aMailAttach(i), 'UTF8'));
                DBMS_LOB.WRITEAPPEND(fTmpBLOB2, Utl_Raw.length(fBuffer), fBuffer);
            End If;
        End Loop;



3) Аттачим к письму:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
           utl_smtp.write_data(v_Mail_Conn, 'Content-Type: '||MAIL_PKG.attachments(x).mimetype||'; charset="utf-8"'|| crlf );
           utl_smtp.write_data(v_Mail_Conn, 'Content-Transfer-Encoding: base64'|| crlf );

         LOOP
           BEGIN
             dbms_lob.read (MAIL_PKG.attachments(x).blobloc, v_amt, ps, vRAW);
           ps := ps + v_amt;
                 utl_smtp.write_raw_data(v_Mail_Conn, UTL_ENCODE.base64_encode(vRAW));                 
           EXCEPTION
                 WHEN no_data_found THEN
             EXIT;
         END;
         END LOOP;



Что то я запутался в этих кодировках.
select * from nls_database_parameters

6 NLS_CHARACTERSET AL32UTF8
19 NLS_NCHAR_CHARACTERSET AL16UTF16
20 NLS_RDBMS_VERSION 11.2.0.4.0
...
Рейтинг: 0 / 0
13.12.2016, 14:00
    #39365705
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTF-8 to ANSI
Чтобы окончательно тебя запутать, добавлю: для того, чтобы Excel нормально отобразил CSV-файл в кодировке UTF-8, он (файл) должен содержать BOM.
...
Рейтинг: 0 / 0
13.12.2016, 14:34
    #39365752
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTF-8 to ANSI
AmKadЧтобы окончательно тебя запутать, добавлю: для того, чтобы Excel нормально отобразил CSV-файл в кодировке UTF-8, он (файл) должен содержать BOM.
Или использовать
Код: plsql
1.
Convert(fStr, 'CL8MSWIN1251', 'AL32UTF8')


(разумеется с коррекцией кодировки вложения в заголовке mime на windows-1251)
но в этом случае вступают ограничения однобайтовых кодировок, + языковые настройки конкретной установленной windows
...
Рейтинг: 0 / 0
13.12.2016, 15:00
    #39365783
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTF-8 to ANSI
Vadim LejninИли использовать
Код: plsql
1.
Convert(fStr, 'CL8MSWIN1251', 'AL32UTF8')


Oracle не рекомендует использовать эту функцию (за исключением некоторых случаев, где данный таковым не является). Для конвертации ему подойдет один из двух пакетов, которые я привел выше. Хотя, по-хорошему, судя по приведенным кускам кода работы с коллекциями, решение нуждается в ревью целиком.
...
Рейтинг: 0 / 0
13.12.2016, 15:04
    #39365788
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTF-8 to ANSI
AmKadVadim LejninИли использовать
Код: plsql
1.
Convert(fStr, 'CL8MSWIN1251', 'AL32UTF8')


Oracle не рекомендует использовать эту функцию (за исключением некоторых случаев, где данный таковым не является). Для конвертации ему подойдет один из двух пакетов, которые я привел выше. Хотя, по-хорошему, судя по приведенным кускам кода работы с коллекциями, решение нуждается в ревью целиком.
Дык он ее уже использует
...
Рейтинг: 0 / 0
13.12.2016, 15:07
    #39365791
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTF-8 to ANSI
Vadim LejninДык он ее уже используетИ в конкретном данном случае - бессмысленно.
...
Рейтинг: 0 / 0
13.12.2016, 15:08
    #39365792
Петров Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTF-8 to ANSI
Спасибо, все получилось.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / UTF-8 to ANSI / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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