Тема: Замена CP1252 -> CP1251 на кириллические буквы
В некоторых случаях при копировании текстового кириллического слоя из файла PDF в Word образуются кракозябры следующего вида:
Ïðè ìаíèïóëÿöèÿõ ñ äåðåâüÿìè ÷àñòî âîçíèêàåò çàäà÷à ñîçäàíèè èõ êîïèé. Êàê è áîëüøèíñòâî äðóãèõ àëãîðèòìîâ àëãîðèòì êîïèðîâàíèÿ èìååò ðåêóðñèâíûõ õàðàêòåð. Îí íà÷èíàåò ðàáîòó ñ êîðíÿ è â ïåðâóþ î÷åðåäü ñòðîèò ëåâîå ïîääåðåâî óçëà, à çàòåì - ïðàâîå ïîääåðåâî. Òîëüêî ïîñëå ýòîãî ñîçäàåòñÿ íîâûé óçåë.
Декодер Артемия Лебедева (внешняя ссылка) распознает преобразование этого текста в кириллический, как CP1252 -> CP1251.
Следующий несложный макрос позволяет выполнить преобразование CP1252 -> CP1251 по всему тексту файла Word.
Sub changeToRus()
'
' Замена кракозябр на кириллические буквы
' CP1252 -> CP1251
'
For i = 192 To 255
a1 = i
a = Trim("^u") & Trim(Str(a1))
' Формирование запроса для поля Найти
sRus = Array("А", "Б", "В", "Г", "Д", "Е", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", _
"П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ы", "Ь", "Э", "Ю", "Я", _
"а", "б", "в", "г", "д", "е", "ж", "з", "и", "й", "к", "л", "м", "н", "о", _
"п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я")
' Формирование массива кириллических букв для поля Заменить
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = a
.Replacement.Text = sRus(i - 192)
.Forward = True
.Wrap = wdFindContinue
.MatchCase = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
' Выполнение замены по тексту
Next i
End Sub
Примечание. В процессе написания данного макроса я столкнулся со следующей проблемой. Поиск кракозябр, соответствующих кириллическим буквам А-я, осуществляется в режиме Учитывать регистр (.MatchCase = True) с помощью кодов ^u192-^u255. Поиск и замена кириллических букв А-Я осуществляется в режиме Учитывать регистр с помощью кодов ^128-^159, а букв а-п – с помощью кодов ^160-^175. Однако, символы с кодами ^176 и далее уже не соответствуют буквам р-я. Поэтому, по аналогии с решением http://wordexpert.ru/page/psevdokirilli … -kirillicu, пришлось вводить массив sRus, содержащий все кириллические буквы.
Буду признателен, если эксперты посоветуют мне, как выполнить поиск и замену букв р-я с помощью кодов типа ^nnn.
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.