MS Sans Serif не может отображать текст Unicode в XP, но может в Win7 - PullRequest
1 голос
/ 28 февраля 2012

У меня есть проект Unicode, который отображает арабский / кириллический / китайский в Win7, но когда я копирую тот же самый исполняемый файл на виртуальную машину с новой установкой XP SP3, вместо этого отображаются черные прямоугольники.

В то же время у меня есть нарисованный владельцем элемент управления, который хорошо их отображает. Я использую шрифт Arial в нем. По умолчанию элементы управления MFC, похоже, используют MS Sans Serif. Когда я изменил свой нарисованный владельцем элемент управления на MS Sans Serif, он также начал показывать черные прямоугольники.

Итак, я предполагаю, что проблема с MS Sans Serif в XP. Может ли MS Sans Serif отображать Unicode в XP?

Ответы [ 4 ]

8 голосов
/ 28 февраля 2012

В Windows очень мало шрифтов с достаточно широким репертуаром символов для представления всего арабского, кириллического и китайского языков.Те, о которых я знаю, по умолчанию не поставляются с Windows.

Вместо этого большинство API-интерфейсов Windows для рисования текста автоматически переключаются между шрифтами, как это необходимо для покрытия.Например, вы можете нарисовать строку в Tahoma, в которой есть несколько китайских символов.Windows автоматически переключится с Tahoma на шрифт с китайскими иероглифами.Это создает иллюзию наличия шрифта с огромным набором символов.

Windows делает это автоматически, если выбранный вами шрифт является одним из основных шрифтов TrueType или OpenType.Если вы выбрали неясный шрифт или растровый шрифт, это не так.Как указывает другой ответ, MS Sans Serif является растровым шрифтом.Microsoft Sans Serif - это шрифт TrueType.

Кроме того, для работы связывания шрифтов и отступления необходимо наличие некоторого шрифта, к которому можно обратиться.Например, если у вас нет шрифтов с китайскими иероглифами, вместо китайских вы получите поля-заполнители.Более новые версии Windows (например, Windows 7) имеют множество запасных шрифтов, доступных из коробки.Более старые версии Windows (например, XP) поставлялись для конкретных регионов, в которых были только шрифты для этого региона.Если у вас установлена ​​Windows XP в «США», вам, вероятно, придется зайти в панель управления и сказать, что вам нужна многоязычная поддержка, которая будет загружать шрифты и таблицы для китайского, арабского и т. Д.

Обновление: Марк Рэнсом попросил ссылки на документацию.Я не нашел ни одного места, где бы описывались детали связывания шрифтов и откат шрифтов в одном месте.То, что я знаю, я собрал из различных источников, таких как блоги MSDN (особенно Майкл Каплан и Рэймонд Чен) и документация Uniscribe.Из-за проекта с чрезвычайно необычными ограничениями мне пришлось реализовать собственную связку шрифтов и откат.В процессе я узнал много нового о том, как Windows это делает.

Вот несколько лакомых кусочков:

Определения связывания шрифтов и восстановления шрифтов: http://msdn.microsoft.com/en-us/goglobal/bb688163

РазъяснениеРазличия между ними: http://www.siao2.com/2005/10/01/476022.aspx

Неподписанная документация: http://msdn.microsoft.com/en-us/library/windows/desktop/dd374091(v=vs.85).aspx

Некоторые особенности резервного копирования шрифтов: http://msdn.microsoft.com/en-us/library/windows/desktop/dd374105(v=vs.85).aspx

Сообщения Майкла Каплана в блоге о замене и шрифте шрифтовссылки начинаются здесь: http://www.siao2.com/2005/03/20/399322.aspx

Вы можете немного узнать о связывании шрифтов из старых API MLang, предоставляемых IE: http://msdn.microsoft.com/en-us/library/ie/aa767872(v=vs.85).aspx

2 голосов
/ 28 февраля 2012

Microsoft рекомендует использовать «MS Shell Dlg» или «MS Shell Dlg 2» в качестве указанного шрифта в диалоговых окнах и элементах управления. Это логическое имя шрифта, которое будет заменено физическим шрифтом, подходящим для вашего ПК.

См. Эту статью TechNet Использование MS Shell Dlg и MS Shell Dlg 2 .

1 голос
/ 28 февраля 2012

На моем Windows 7 Pro MS Sans Serif, кажется, содержит только символы ISO Latin 1 - даже не символы windows-1252, такие как en dash «-». Это основано только на просмотре карты символов, когда установлен шрифт MS Sans Serif. Поэтому я не ожидал бы, что в XP будет MS Sans Serif с более широким репертуаром символов.

Обратите внимание, что "MS Sans Serif", очень ограниченный растровый (растровый) шрифт, весьма отличается от "Microsoft Sans Serif", векторного шрифта с довольно хорошим охватом символов. Некоторые программы могут автоматически переключаться на него при запросе «MS Sans Serif». В Word 2007 я даже не вижу «MS Sans Serif». В IE 9 (но не в Firefox), если я укажу font-family: MS Sans Serif в CSS, я получу «Microsoft Sans Serif».

0 голосов
/ 28 февраля 2012

Эти глифы не должны быть установлены в шрифте по умолчанию, поставляемом с xp sp3, если вам нужно, чтобы они работали, вам придется установить обновленный пакет шрифтов.

...