Windows 10: неполное отображение символов шрифта

Windows 10: неполное отображение символов шрифта
  • по умолчанию windows 10 поставляется сsegoe ui эмодзишрифт
  • Этот шрифт является единственным шрифтом по умолчанию, который содержит следующие 4 символа Unicode:

решение1

Современные элементы пользовательского интерфейса работают не так, как устаревшие элементы. Диалоговое окно «Выполнить» и блокнот — это устаревшие элементы, которые не обновляются вместе с остальной частью ОС. Панель поиска — это современный элемент ОС, поэтому так должно вести себя и все новые элементы ОС. Семейство шрифтов Segoe было разработано для современного пользовательского интерфейса, и все они используются для различных функций отображения текста. При этом разработка Microsoft не славится последовательностью. Вы можете обнаружить разные элементы, разработанные разными командами, которые ведут себя по-разному.

Дополнительную информацию о том, как по-разному обрабатываются шрифты в «современных» приложениях Windows 10, можно найти в этой статье:https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/typography-in-wpf

WPF обеспечивает расширенную поддержку шрифтов, предоставляя следующие возможности: Unicode для всего текста. Поведение и выбор шрифта больше не требуют набора символов или кодовой страницы.

Это объясняет, как современные приложения могут отображать символы из нескольких шрифтов одного семейства шрифтов.

решение2

@harrymc «Все программное обеспечение под Windows использует один и тот же API, который поддерживается одними и теми же компонентами Windows».

я: * это относительно вашего определения "api" * они оба работают в .net, который, в свою очередь, работает в winrt (среда выполнения Windows) * однако, они все равно могут иметь разные интерфейсы * с учетом этого, вики предполагает, что они разные: https://en.wikipedia.org/wiki/Windows_Forms * «Windows Forms построен на существующем API Windows, а некоторые элементы управления просто являются оболочкой для базовых компонентов Windows». https://en.wikipedia.org/wiki/Windows_Presentation_Foundation * «Архитектура WPF охватывает как управляемый код, так и компоненты собственного кода. Однако открытый API доступен только через управляемый код. В то время как большая часть WPF находится в управляемом коде, механизм композиции, который отображает приложения WPF, является собственным компонентом».

https://docs.microsoft.com/en-us/dotnet/api/system.windows.media.fontfamily?view=netframework-4.8

«Механизм резервного копирования шрифтов WPF заменяет предыдущие технологии замены шрифтов Win32».

https://support.microsoft.com/en-us/help/3083806/why-does-some-text-display-with-square-boxes-in-some-apps-on-windows-1

«Windows по-прежнему отлично поддерживает Unicode и международный текст, а также гарантирует, что универсальные приложения Windows смогут отлично отображать текст на настольных устройствах и устройствах любого другого форм-фактора.

@HackSlash «Диалоговое окно «Выполнить» и блокнот — устаревшие элементы, которые не обновляются вместе с остальной частью ОС».

я: * неправда * однако блокнот не обновляется так часто как wordpad

примечание * я скоро приведу этот пост в порядок * я едва успел это сделать, прежде чем истекло время вознаграждения * у @harrymc и @HackSlash были фундаментальные ошибки * поэтому я хотел предоставить более точную информацию

решение3

Я не согласен с принятым ответом: Все программное обеспечение под Windows использует один и тот же API, который поддерживается одними и теми же компонентами Windows. Хотя более старое программное обеспечение может использовать устаревший API, это не относится ни к Notepad, ни к Wordpad, которые все еще находятся в стадии разработки.

Проблема, с которой столкнулся автор поста с Notepad и Wordpad, больше связана с пользовательским интерфейсом, чем с проблемами этих продуктов, и вот доказательство: символы отображаются правильно, если текущий шрифт указан как Segoe UI Emoji:

введите описание изображения здесь

Однако не ожидайте, что вставка этих символов сработает, если текущий шрифт не является Segoe UI Emoji, если только один или несколько из них не включены в текущий шрифт.

Для диалогов Windows: при создании диалога шрифт, используемый текстовым полем, указывается в определении диалога. Шрифт Segoe UI Emoji, очевидно, не подходит в качестве обычного текстового шрифта и поэтому никогда не будет использоваться для такого пользовательского интерфейса.

Вы не можете заставить диалог использовать другой шрифт, нежели тот, с которым он запрограммирован, по крайней мере, не взломав .exeили .dll, содержащий определение диалога. Поэтому вы не можете ожидать, что вставка эмодзи будет работать в диалогах.

РЕДАКТИРОВАТЬ

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

Буфер обмена Windows богат, в отличие от буфера обмена Linux. Он не только содержит символы, но также может содержать информацию о языке, направлении (вправо, влево), шрифте и т. д. API способен устанавливать и получать различные форматы, а также достаточно умен, чтобы преобразовывать при получении сохраненный формат в запрошенный формат.

Итак, то, что вы получаете при копировании и вставке специальных символов, зависит от API, который использовался исходной и целевой программами. Ниже приведен пример, который использует Wordpad.

Исходный текст шрифтом Arial:

введите описание изображения здесь

Теперь я копирую-вставляю ваш четвертый символ из браузера в конец текста, и о чудо — шрифт теперь Segoe UI Emoji:

введите описание изображения здесь

И вот теперь я нажимаю на слово «Arial», и шрифт внезапно становится другим:

введите описание изображения здесь

Итак, теперь у нас есть текст, набранный двумя разными шрифтами. Символ, который мы вставили (

Связанный контент