Имя: Пароль:
1C
1С v8
ADODB.Stream, CDO.Message и кодировка письма .msg
0 heserby
 
22.10.14
16:13
Добрый день, форумчане!

Есть папка с письмами *.msg. Требуется распечатывать их из 1с.

Получаю письма таким образом:

Функция ПолучитьПисьмоНаСервере(ДанныеФайла, КодировкаПисьма)

    Перем Имя,Путь;
    Байт = 255;
    
    ПолныйПуть = "C:\Temp\" + ДанныеФайла.ПутьКФайлу;
    
    обСообщение = Неопределено;
    обСообщение = Новый COMОбъект("CDO.Message");
    
    обПоток = Новый COMОбъект("ADODB.Stream");
    обПоток.CharSet = КодировкаПисьма;
    обПоток.Type = 2;
    обПоток.Mode = 3;
    обПоток.Open();
    обПоток.LoadFromFile(ПолныйПуть);
    обПоток.Flush();

    Если НЕ КодировкаПисьма = "windows-1251" Тогда
    
        СтримВыход = Новый COMОбъект("ADODB.Stream");
        СтримВыход.Type = 2;
        СтримВыход.Mode = 3;
        СтримВыход.charset = "windows-1251";
        СтримВыход.LineSeparator = -1;
        СтримВыход.Open();
        Всего = обПоток.size;
        Пока обПоток.EOS = 0 Цикл
            СтримВыход.WriteText(обПоток.ReadText(Байт),?(Байт=-2,1,0));
        КонецЦикла;
        СтримВыход.Flush();
        
        обСообщение.Datasource.OpenObject(СтримВыход, "_Stream");
        СтримВыход.Close();
    Иначе    

        обСообщение.Datasource.OpenObject(обПоток, "_Stream");
    
    КонецЕсли;

    обСообщение.DataSource.Save();
    
    обПоток.Close();
    
    ХТМЛТекстПисьма = обСообщение.BodyPart.Fields(7).OriginalValue;

    Возврат ХТМЛТекстПисьма;

КонецФункции


Большинство писем в кодировке koi-8, и мой stream меняет кодировку на win-1251. Но попадаются иногда письма в кодировке utf-8 и собственно, сразу в win-1251, и приходят кракозябры.

Вопрос: Как мне получить кодировку письма? Помощи, пожалуйста.
1 heserby
 
22.10.14
16:55
апну
2 heserby
 
22.10.14
17:32
пожалуй, еще апну разок
3 heserby
 
23.10.14
10:39
ап
4 heserby
 
23.10.14
10:59
ап!
5 Mordor_1C
 
23.10.14
11:08
6 Mordor_1C
 
23.10.14
11:15
(0) Тут еще посмотри
http://www.cyberforum.ru/vba/thread1205519.html
7 heserby
 
23.10.14
13:15
(5) (6) Спасибо.
Возможно я неправильно сформулировал вопрос.

Я могу перекодировать письмо из одной кодировки в другую, да.

Но я не пойму в какой кодировке у меня письмо изначально.

В ComОбъект Stream надо сразу задавать Charset. А какой выбрать я не знаю. Письма есть в 3 кодировках.

Как мне получить кодировку из письма?
8 heserby
 
23.10.14
15:45
ап...
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.