Монгольские коллеги и товарищи могут присылать вам документы в шрифте Arial Mon с нестандартной кодировкой. Даже если вы установите этот шрифт, вы не сможете редактировать текст, проверка орфографии работать не будет. Как бороться с такими документами?
Шрифт замышлялся монголами как средство локализации компьютеров с OS Windows с предустановленной кодовой страницей CP-1252 (западно-европейские
страны).
Было это судя по всему в эпоху WIndows 95.
С появлением Windows и в Office поддержки Unicode шрифт Arial Mon был неверно модифицирован, произошла некорректная замена кодов символов:
Unicode соответствия CP-1252 вместо
Unicode соответствия CP-1251
В итоге монголы создают документы на монгольском и русском языках в неверной кодировке. Если у адресата нет шрифта Arial Mon (в котором нет необходимости, т.к. стандартный шрифт Arial поддерживает знаки кириллицы), то получит вордовский документ вида:
Æ.ÖÝÂÝÝÍ – ÎÑÍÎÂÀÒÅËÜ
ÌÎÍÃÎËÜÑÊÎÉ ÆÓÐÍÀËÈÑÒÈÊÈ
Äîêëàä Ãåíäèðåêòîðà íàöèîíàëüíîãî èíôîðìàãåíòñòâà “ÌÎÍÖÀÌÝ”, äîêòîðà, ïðîôåññîðà Ò.Áààñàíñóðýíà íà íàó÷íî-ïðàêòè÷åñêîé êîíôåðåíöèè, ïðîõîäèâøåé â Óëààíáààòàðå 7 ÿíâàðÿ 2011 ãîäà è ïîñâÿùåííîé 130-ëåòíåìó þáèëåþ âåëèêîãî ïðîñâåòèòåëÿ è ó÷åíîãî
Значит надо просто перекодировать неверные символы согласно таблицам:


НО ! вместо "ï" и "є" подставить монгольские "ү" и "ө"; украинские буквы не используются, поэтому их можно не обрабатывать. В конце заменяем Arial Mon на стандартный Arial
Создаем скрипт на VBA.
В цикле обрабатывается диапазон C0-FF, поскольку в нем различие неверной кодировки идет ровно со смещением 0x350. Отдельно заменяем символы "№", "ё", "ү" и "ө".
Sub MongolFont_Unicoding()
Dim i As Long
Set myRange = ActiveDocument.Content
myRange.Find.MatchCase = True
' Main range
For i = &HC0 To &HFF
myRange.Find.Execute FindText:=ChrW(i), ReplaceWith:=ChrW(i + &H350), _
Replace:=wdReplaceAll
Next i
' Some characters
myRange.Find.Execute FindText:=ChrW(&HA8), ReplaceWith:=ChrW(&H401), _
Replace:=wdReplaceAll 'capital Yo
myRange.Find.Execute FindText:=ChrW(&HAA), ReplaceWith:=ChrW(&H4E8), _
Replace:=wdReplaceAll 'Barred capital O
myRange.Find.Execute FindText:=ChrW(&HAF), ReplaceWith:=ChrW(&H4AE), _
Replace:=wdReplaceAll 'capital mongol Y
myRange.Find.Execute FindText:=ChrW(&HB8), ReplaceWith:=ChrW(&H451), _
Replace:=wdReplaceAll 'small Yo
myRange.Find.Execute FindText:=ChrW(&HB9), ReplaceWith:=ChrW(&H2116), _
Replace:=wdReplaceAll 'No sign
myRange.Find.Execute FindText:=ChrW(&HBA), ReplaceWith:=ChrW(&H4E9), _
Replace:=wdReplaceAll 'Barred small O
myRange.Find.Execute FindText:=ChrW(&HBF), ReplaceWith:=ChrW(&H4AF), _
Replace:=wdReplaceAll 'small mongol Y
With ActiveDocument.Content.Find
.ClearFormatting
.Font.Name = "Arial Mon"
With .Replacement
.ClearFormatting
.Font.Name = "Arial"
End With
.Execute FindText:="", ReplaceWith:="", Format:=True, _
Replace:=wdReplaceAll
End With
End Sub
Запускаем скрипт и получаем документ, корректный с точки зрения Unicode, верно редактируемый, отрабатываемый спеллчекерами, и который можно пересылать по всему миру, радуясь что его везде смогут прочесть без установки шрифта Arial Mon.
Итог скрипта:
Ж.ЦЭВЭЭН – ОСНОВАТЕЛЬ
МОНГОЛЬСКОЙ ЖУРНАЛИСТИКИ
Доклад Гендиректора национального информагентства “МОНЦАМЭ”, доктора, профессора Т.Баасансурэна на
и т.д.
Первоначально результат я получил за 2 минуты пересохраняя из Блокнота, но при этом потерялось форматирование (а в научных документах много ссылок и форматирования). Поэтому я потратил 1 час на скрипт, и еще полчаса на статью. Надеюсь, пригодится
Шрифт замышлялся монголами как средство локализации компьютеров с OS Windows с предустановленной кодовой страницей CP-1252 (западно-европейские
страны).
Было это судя по всему в эпоху WIndows 95.
С появлением Windows и в Office поддержки Unicode шрифт Arial Mon был неверно модифицирован, произошла некорректная замена кодов символов:
Unicode соответствия CP-1252 вместо
Unicode соответствия CP-1251
В итоге монголы создают документы на монгольском и русском языках в неверной кодировке. Если у адресата нет шрифта Arial Mon (в котором нет необходимости, т.к. стандартный шрифт Arial поддерживает знаки кириллицы), то получит вордовский документ вида:
Æ.ÖÝÂÝÝÍ – ÎÑÍÎÂÀÒÅËÜ
ÌÎÍÃÎËÜÑÊÎÉ ÆÓÐÍÀËÈÑÒÈÊÈ
Äîêëàä Ãåíäèðåêòîðà íàöèîíàëüíîãî èíôîðìàãåíòñòâà “ÌÎÍÖÀÌÝ”, äîêòîðà, ïðîôåññîðà Ò.Áààñàíñóðýíà íà íàó÷íî-ïðàêòè÷åñêîé êîíôåðåíöèè, ïðîõîäèâøåé â Óëààíáààòàðå 7 ÿíâàðÿ 2011 ãîäà è ïîñâÿùåííîé 130-ëåòíåìó þáèëåþ âåëèêîãî ïðîñâåòèòåëÿ è ó÷åíîãî
Значит надо просто перекодировать неверные символы согласно таблицам:


НО ! вместо "ï" и "є" подставить монгольские "ү" и "ө"; украинские буквы не используются, поэтому их можно не обрабатывать. В конце заменяем Arial Mon на стандартный Arial
Создаем скрипт на VBA.
В цикле обрабатывается диапазон C0-FF, поскольку в нем различие неверной кодировки идет ровно со смещением 0x350. Отдельно заменяем символы "№", "ё", "ү" и "ө".
Sub MongolFont_Unicoding()
Dim i As Long
Set myRange = ActiveDocument.Content
myRange.Find.MatchCase = True
' Main range
For i = &HC0 To &HFF
myRange.Find.Execute FindText:=ChrW(i), ReplaceWith:=ChrW(i + &H350), _
Replace:=wdReplaceAll
Next i
' Some characters
myRange.Find.Execute FindText:=ChrW(&HA8), ReplaceWith:=ChrW(&H401), _
Replace:=wdReplaceAll 'capital Yo
myRange.Find.Execute FindText:=ChrW(&HAA), ReplaceWith:=ChrW(&H4E8), _
Replace:=wdReplaceAll 'Barred capital O
myRange.Find.Execute FindText:=ChrW(&HAF), ReplaceWith:=ChrW(&H4AE), _
Replace:=wdReplaceAll 'capital mongol Y
myRange.Find.Execute FindText:=ChrW(&HB8), ReplaceWith:=ChrW(&H451), _
Replace:=wdReplaceAll 'small Yo
myRange.Find.Execute FindText:=ChrW(&HB9), ReplaceWith:=ChrW(&H2116), _
Replace:=wdReplaceAll 'No sign
myRange.Find.Execute FindText:=ChrW(&HBA), ReplaceWith:=ChrW(&H4E9), _
Replace:=wdReplaceAll 'Barred small O
myRange.Find.Execute FindText:=ChrW(&HBF), ReplaceWith:=ChrW(&H4AF), _
Replace:=wdReplaceAll 'small mongol Y
With ActiveDocument.Content.Find
.ClearFormatting
.Font.Name = "Arial Mon"
With .Replacement
.ClearFormatting
.Font.Name = "Arial"
End With
.Execute FindText:="", ReplaceWith:="", Format:=True, _
Replace:=wdReplaceAll
End With
End Sub
Запускаем скрипт и получаем документ, корректный с точки зрения Unicode, верно редактируемый, отрабатываемый спеллчекерами, и который можно пересылать по всему миру, радуясь что его везде смогут прочесть без установки шрифта Arial Mon.
Итог скрипта:
Ж.ЦЭВЭЭН – ОСНОВАТЕЛЬ
МОНГОЛЬСКОЙ ЖУРНАЛИСТИКИ
Доклад Гендиректора национального информагентства “МОНЦАМЭ”, доктора, профессора Т.Баасансурэна на
и т.д.
Первоначально результат я получил за 2 минуты пересохраняя из Блокнота, но при этом потерялось форматирование (а в научных документах много ссылок и форматирования). Поэтому я потратил 1 час на скрипт, и еще полчаса на статью. Надеюсь, пригодится
где ты этому всему учился? если не секрет )))
ОтветитьУдалитьДавно смотрю за твоими публикациями и деятельностью, но ни разу не промелькнули источники познаний. мне, как отсталому в этих вопросах гражданину, интересно
гугл, плюс лет 20 назад прослушанные лекции, и практитум по ассемблеру.
ОтветитьУдалитьОгромное спасибо за написание макроса. Работаем с монголами по конференции. Прислали статьи в такой кодировке, скрипт очень помог их исправить
ОтветитьУдалитьОчень рад! Странно, что монголы до сих пор не справились с нестандартными кодировками.
Удалить