Как прочитать испорченное письмо
При работе с электронной почтой время от времени приходится сталкиваться с нечитаемыми сообщениями. Обычно это связано с проблемами кириллицы в российской части Интернет. Стандартной кодировкой кириллицы при работе с почтой считается KOI-8R, т.е. Unix-кодировка. Так как письмо проходит через большое количество почтовых серверов и некоторые из них считают своим долгом перекодировать ваше письмо в Koi, бывает, что письмо приходит адресату в совершенно неузнаваемом виде. Следующий макрос, который мы напишем, будет бороться с этой проблемой, переводя сообщение из Koi в Windows-кодировку.
Идея очень проста. В двух строковых переменных WinCodePage и KoiCodePage зададим кодовые таблицы Windows и Koi, затем будем заменять i-тую букву из строки WinCodePage на i-тую букву cтроки KoiCodePage. При этом будем отмечать курсивом уже замененные буквы, чтобы не заменить одну и ту же букву дважды.
Sub KoiToWin()
KoiCodePage = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯабвгдежзийклмнопрстуфхцчшщьыъэюя"
Rem задали строку кодировки Windows
WinCodePage = "бвчздецъйклмнопртуфхжигюыэшщяьасБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭШЩЯЬАС"
Rem задали строку кодировки Koi
Selection.Find.ClearFormatting
Rem Заменяем только не курсив
Selection.Find.Font.Italic = False
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Font.Italic = True
Rem Заменяем на курсив
Rem Обратите внимание, замену производится с учетом форматирования.
Rem Выделяем курсивом уже преобразованные буквы, иначе некоторые буквы будут
Rem преобразованы дважды.
For i = 1 To Len(WinCodePage) rem Функция Len определяет длину строки
MySearch = Mid(KoiCodePage, i, 1)
MyReplace = Mid(WinCodePage, i, 1)
Rem Функция Mid вырезает из строки WinCodePage i-тую букву
With Selection.Find
.Text = MySearch
.Replacement.Text = MyReplace
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = True
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Next i
Rem Снимаем курсив
Selection.WholeStory
With Selection.Font
.Italic = False
End With
End Sub
Для обратного кодирования нужно только поменять местами имена MySearch и MyReplace.
Теперь Вы сможете не только прочитать все почтовые сообщения, но и перекодировать HTML-документы для публикации их в Web.