Имя: Пароль:
1C
1С v8
Декодировка текста в обработке
0 Selikat
 
24.11.17
14:45
Доброго дня! Есть обработка, вытягивающая с почти сообщения, разбирающая текст и создающая на его основе документы.
Столкнулся с проблемой, при получении писем от определенного отправителя 1с трактут текст сообщения как:
From: <anonimniy@640067937.ru>

X-Mailer: The Bat! (v3.99.3) Professional

Reply-To: <anonimniy@640067937.ru>

X-Priority: 3 (Normal)

MIME-Version: 1.0

Content-Type: text/plain; charset=UTF-8

Content-Transfer-Encoding: 8bit
Message-Id: <20171124063443.7C9E316401D7@nepropadu.ru>



: 09:34, 24.11.2017

: 123123123
:
Testpretenz

IP : 46.4.69.199

Русские символы пропадают после того как срабатывает функция декодировки win1251 в utf-8

Функция:

если ВКкс<>Индекс тогда
//            ВК.ПолучитьЗаголовок(Индекс);
            ВК=Письма.Получить(Индекс);
//            ВК.ПолучитьТело(Индекс);
            если НРЕГ(сокрлп(ВК.Кодировка))<>"utf-8" тогда
            стр="";
            Для каждого ТекстПисьма из ВК.Тексты цикл
                Стр=Стр+" "+ТекстПисьма.Текст;
            КонецЦикла;    
//                стр=ВК.Тело;
//                    
                Длина=СтрДлина(Стр);
//                
            Для Н=1 По Длина Цикл
                    Знак=Сред(Стр,Н,1);
                    Код=КодСимвола(Знак,1);
                    Если Код<128 Тогда
                        Итог=Итог+Знак;
                    ИначеЕсли (Код>=128)И(Код<192) Тогда
                        
                    Иначе
                        Н=Н+1;
                        Знак2=Сред(Стр,Н,1);
                        Код2=КодСимвола(Знак2,1);
                        Если Код=208 Тогда
                            Если Код2=129 Тогда
                                Итог=Итог+"Ё";
                            Иначе
                                Итог=Итог+Символ(КодСимвола("А",1)+Код2-144);
                            КонецЕсли;                                                      
                        ИначеЕсли Код=209 Тогда
                            Если Код2=145 Тогда
                                Итог=Итог+"ё";
                            Иначе
                                Итог=Итог+Символ(КодСимвола("р",1)+Код2-128);
                            КонецЕсли;
                        КонецЕсли;
                    КонецЕсли;
                КонецЦикла;
                ном=Найти(Итог,"This message was delivered by MDaemon - http");
                если Ном<>0 тогда
                    Итог=Лев(Итог,ном-1);
                конецесли;
                Итог=СокрЛП(Итог);
            иначе
                стр="";
                Для каждого ТекстПисьма из ВК.Тексты цикл
                    Стр=Стр+""+ТекстПисьма.Текст;
                КонецЦикла;    
                Итог=СокрЛП(стр);
            конецесли;

Если функция не срабатывает вместо русских символов появляется Р через каждый символ, что явно указывает на win1251.
1 Selikat
 
24.11.17
14:46
А это оригинал:


Отправлено: 09:34, 24.11.2017

Штрихкод: 123123123
Сообщение:
Testpretenz

IP отправителя: 46.4.69.19
2 Beduin
 
24.11.17
14:49
(0) А так не
ТекстовыйДокумент.Записать(Кодировка.?
Зачем свою перекодировку писать?
3 Selikat
 
24.11.17
14:51
(2) Текст сначала в файл, потом менять кодировку, а потом обратно?
4 Beduin
 
24.11.17
14:53
(3) Это проще и надежней. Или не?
5 Selikat
 
24.11.17
15:04
(2) C 7ки код преределанный... Научите -ТекстовыйДокумент.Записать(Кодировка.?
6 Beduin
 
24.11.17
15:09
(5) ТекстДок = Новый ТекстовыйДокумент;
    ТекстДок.Прочитать("C:\test.txt");
    ТекстДок.Записать("C:\test.txt","windows-1251");
Типа так
7 Selikat
 
24.11.17
15:20
(6) Не получается, я не из файла получаю текст, а из :

если ВКкс<>Индекс тогда
//            ВК.ПолучитьЗаголовок(Индекс);
            ВК=Письма.Получить(Индекс);
            
            если НРЕГ(сокрлп(ВК.Кодировка))<>"utf-8" тогда
            стр="";
            
            Для каждого ТекстПисьма из ВК.Тексты цикл
                Стр=Стр+" "+ТекстПисьма.Текст;
            КонецЦикла;    


И со стр работаю
8 Beduin
 
24.11.17
15:23
(7) Временный файл делаешь. Но это писать не будут. Сам ищи)
9 Сияющий в темноте
 
24.11.17
20:08
через каждый символ Р это и есть utf-8