Outlook VBA: кодировка файлов, сохраненых через макрос

Узнай цену своей работы

Формулировка задачи:

Здравствуйте уважаемые, В VBA относительно новичок. Работаю над макросом, сохраняющем письма с вложениями на жесткий диск. Письма сохраняются в таком порядке:
  1. Вложения;
  2. письмо в формате .txt
  3. письмо в формате .msg
Причем предпочтительно сохранять только вложения и письма в формате .txt. Сохранение писем в формате .msg мера принудительная, ввиду величины файла, содержащего все вложения + трудности извлечения полезной информации. Суть проблемы: при сохранении письма в формате .txt через макрос из MS Outlook 2007, файл сохраняется в кодировке ANSI, и все символы UTF-8 заменяются на "?". Причем, проблема проявилась после перехода с MS Outlook 2003. Сий (старый добрый) клиент символы UTF-8 заменял соответсвующими кодами типа ê ;, что позволяло восстановить читабельный текст в процессе дальнейшей обработки. Вопрос: как управлять кодировкой файла, создаваемого через макрос VBA, т.е. как сохранить .txt в UTF-8? Как вариант, как пи сохранении заменить символы UTF-8 на коды соответствующих символов по типу MS Outlook 2003? Код VBA:

Решение задачи: «Outlook VBA: кодировка файлов, сохраненых через макрос»

textual
Листинг программы
Sub SaveFolderToHDD(myItem As Outlook.MailItem)
     ...
     Const sPATH0 As String = "C:\Temp\Outlook_Items"
     Const OLTXT = 0
     ...
     miItem.SaveAs sPath_i & "RawData#" & ".msg"   ', olMSG
     miItem.SaveAs sPath_i & "SvMsg#" & ".txt", OLTXT
 
     Call ChangeFileCharset(sPath_i & "SvMsg#" & ".txt", "UTF-8", "ANSI")
 
     ...
End Sub
 
 
 
Function ChangeFileCharset(ByVal namef$, ByVal DestCharset$, _
                           Optional ByVal SourceCharset$) As Boolean
 
    On Error Resume Next: Err.Clear
    With CreateObject("ADODB.Stream")
        .Type = 2
        If Len(SourceCharset$) Then .Charset = SourceCharset$    ' указываем исходную кодировку
        .Open
        .LoadFromFile namef$    ' загружаем данные из файла
        FileContent$ = .ReadText   ' считываем текст файла в переменную FileContent$
        .Close
        .Charset = DestCharset$    ' назначаем новую кодировку
        .Open
        .WriteText FileContent$
        .SaveToFile namef$, 2   ' сохраняем файл уже в новой кодировке
        .Close
    End With
    ChangeFileCharset = Err = 0
End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы