Windows 10:字体字符显示不完整

Windows 10:字体字符显示不完整
  • 默认情况下,Windows 10 自带segoe ui 表情符号字体
  • 该字体是唯一具有以下 4 个 unicode 字符的默认字体:

答案1

现代 UI 元素的工作方式与旧元素不同。运行对话框和记事本都是古老的旧元素,不会随操作系统的其余部分一起更新。搜索栏是现代操作系统元素,因此这应该是操作系统所有较新元素的行为。Segoe 系列字体是为现代 UI 开发的,它们都用于各种文本显示功能。话虽如此,微软的开发并不以一致性而闻名。您可能会发现由不同团队开发的不同元素具有不同的行为。

有关“现代”Windows 10 应用程序中如何以不同方式处理字体的更多信息,请阅读本文:https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/typography-in-wpf

WPF 通过提供以下功能来增强字体支持:所有文本均采用 Unicode。字体行为和选择不再需要字符集或代码页。

这解释了现代应用程序如何显示字体系列中多种字体的字符。

答案2

@harrymc “Windows 下的所有软件都使用相同的 API,并由相同的 Windows 组件支持。”

我:* 这与您对“api”的定义有关* 它们都在 .net 中运行,而 .net 本身在 winrt(windows 运行时)中运行* 但是,它们仍然可以有不同的接口* 值得注意的是,wiki 表明它们是不同的: https://en.wikipedia.org/wiki/Windows_Forms * “Windows 窗体建立在现有的 Windows API 之上,并且一些控件仅仅包装了底层的 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 “运行对话框和记事本都是古老的遗留元素,不会随着操作系统的其余部分而更新。”

我:* 不对 * 但是,记事本的更新频率不如写字板

笔记 * 我会尽快整理这篇文章 * 在悬赏时间结束前我几乎没有时间做这个 * @harrymc 和 @HackSlash 都犯了根本性的错误 * 所以我想提供更准确的信息

答案3

我不同意公认的答案:Windows 下的所有软件都使用相同的 API,这些 API 由相同的 Windows 组件支持。虽然较旧的软件可能使用过时的 API,但 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”这个词,字体突然就变了:

在此处输入图片描述

因此,我们现在有了两种不同字体的文本。我们粘贴的字符(

相关内容