在 Windows 10 的某些应用中,为什么部分文本会显示为方框?

症状
在 Windows 10 桌面版和 Windows 10 移动版上运行某些应用时,部分字符显示为一个方框或三角形框、或显示为内部带有点、问号或“x”的框,而同一应用运行在 Windows 或 Windows Phone 早期版本上时则没有出现此问题。

通常情况下,此问题涉及中东或亚洲地区语言(阿拉伯语、中文、印地语等)的文本。 对于 Windows 10 移动版,此问题主要涉及东亚语言(中文、日语和韩语)。 对于 Windows 10 桌面版,此问题通常涉及系统未配置的语言,并且出现在支持可能涉及国际语言的方案(例如,浏览 Web 及社交网络应用中的用户通知)的特定类型的应用中。
原因
我们已在影响字体的 Windows 10 中进行了一些重要改进;下面提供了有关这些改进的更多详细信息。 这些更改的不利影响在于,为 Windows 或 Windows Phone 早期版本创建的一小部分现有应用可能会受到影响。
  • Windows Phone 8.1 中包含的某些字体没有包含在 Windows 10 移动版中。
  • 以前包含在每个 Windows 桌面系统中的某些字体已移至可选字体包中,因此在所有 Windows 10 桌面系统中可能不显示。

下面提供了有关这些更改的更多详细信息。 在某些应用中,显示特定的国际化文本时,这些更改可能导致出现“方框”问题。

所有 Windows 10 版本都包括提供广泛的语言支持的字体,并且 WIndows 平台包括字体回退机制,旨在确保任何语言的文本都能始终显示清晰的字形,而不是显示为框。 但是,某些应用可能直接依赖于特定的字体以显示特定的 Unicode 字符,并没有利用 Windows 提供的字体回退机制。 在某些情况下,这些应用直接依赖于默认不在 Windows 10 系统上显示的字体。 由于应用尝试使用的字体没有在系统上显示,因此使用一些其他字体来显示文本,该字体可能不支持要显示的全部字符。 当使用不支持某个字符的字体显示该字符时,使用的是该字体中的默认“未定义”字形。 大多数字体中的“未定义”字形的外观是三角形框或其变体。

Windows 10 中的字体主要改进概述

Windows 10 的一个关键的高级目标是使 Windows 成为适用于基于通用 OS 核心及共享应用平台(通用 Windows 平台 (UWP))构建的不同设备类别的操作系统系列。 UWP 可以启用编写和构建一次并且可以在各种设备上运行的应用,范围涵盖从 Hololens 到 Xbox 到 Surface Hub。 对于此聚合应用平台的一个要求是包含一组可在所有这些设备类别中通用的字体。 在过去的版本中,已向 Windows Phone、Xbox One 和 Windows 桌面客户端提供了不同的字体集。 Windows 10 中现已包含一个通用字体集,确保可以跨所有 Windows 10 版本和所有设备类别及外形规格在所有 Windows 10 设备上显示。 此外,这一通用字体集还提供全面的 Unicode 支持,使用仅需有限的磁盘空间的一小部分字体就能涵盖全世界几千种语言。

下文提供了通用 UWP 字体集:

https://msdn.microsoft.com/zh-cn/library/windows/apps/hh700394.aspx#recommended_fonts

Windows 桌面客户端通常用于存储限制不太苛刻的设备,这样对字体就有了更大的选择空间。 按照惯例,Windows 桌面用于存储容量较大的设备,但近年来,我们看到很多新外形规格的设备(如价格较低的平板电脑)存储空间更加具有局限性。 Windows 10 的另一个关键高级目标是使 Windows 桌面客户端可以在此类价格较低的设备上更好地发挥作用。

随着 Windows 的国际化语言覆盖面不断扩大,无论指定系统上的用户实际上是否需要其他语言的字体,每个系统中都会涵盖越来越多的国际化字体。 这为字体选择器控件和对话框增加了大量选项,但与指定用户关系不大。 例如,尽管西班牙用户可能从不使用泰语,但是他/她可以从许多泰语字体中进行选择。 此外,这也为每个 Windows 桌面系统大小增加了数百兆字节。 为了减少 Windows 所需的磁盘空间容量,并提高为指定用户提供的字体选项相关性,我们将大量 Windows 字体移入了可选字体功能。

这些可选字体功能由不同的脚本进行管理,并且具有语言关联性,还会根据这些语言关联性自动安装。 例如,“简体中文补充字体”功能包含简体中文专用的字体。 如果已安装 Windows 10 的简体中文版本,则可能已经预安装了此可选字体功能。 如果安装了 Windows 10 的其他语言版本,但用户启用了简体中文输入法,或者如果用户配置文件与已包含简体中文的 Microsoft 帐户关联,并且该配置文件在设备上漫游,系统会通过 Windows 更新自动安装简体中文补充字体功能。

通过安装可选字体包来匹配系统中主动使用的语言集,我们可以在提供的字体选项数量和使用的磁盘占用空间之间达到最佳平衡。 但是,即使不安装任何这些可选字体功能,每个 Windows 桌面系统也仍然包括通用 UWP 字体,以便确保 Windows 仍然为 Unicode 和国际化文本提供强大的支持,同时确保通用 Windows 应用在桌面设备和各其他外形规格设备上以最佳效果显示文本。

Windows 10 移动版字体更改详细信息

为了使用有限数量的字体定义此聚合 UWP 字体集,Windows 10 移动版中已排除 Windows Phone 8.1 中存在的部分字体:
  • Dengxian、Dengxian Bold
  • Estrangelo Edessa
  • Khmer UI、Khmer UI Bold
  • Lao UI、Lao UI Bold
  • Leelawadee、Leelawadee Bold
  • Lucida Sans Unicode
  • Microsoft MHei、Microsoft MHei Bold
  • Microsoft NeoGothic、Microsoft NeoGothic Bold
  • Microsoft Uighur
  • Segoe WP、Segoe WP Light、Segoe WP SemiLight、Segoe WP Semibold、Segoe WP Bold、Segoe WP Black
  • Segoe WP Emoji
  • Tahoma、Tahoma Bold
  • Urdu Typesetting、Urdu Typesetting Bold
  • Yu Gothic Bold


如果 Windows Phone 应用直接依赖于上文列出的其中一种字体来显示特定的 Unicode 字符,并且没有利用 Windows 提供的字体回退机制,字符将最终显示为“方框”字形。

Windows 10 Desktop 字体更改详细信息

如上文所述,各 Windows 桌面客户端系统以前包含的大量字体在 Windows 10 中已移入可选字体功能。

下表提供了可选字体功能以及代表语言关联性的完整列表。 已列出移入这些包中的精选字体;在以前的 Windows 版本中,这些字体被用作 Shell 用户界面字体,但已被更新的 Windows 字体取代。

可选字体包语言关联性已移入可选包的主要字体
阿拉伯语脚本补充字体使用阿拉伯语脚本的语言;例如,阿拉伯语、波斯语和乌尔都语。
孟加拉语脚本补充字体使用孟加拉语脚本的语言;例如,阿萨姆语、孟加拉语。Vrinda
加拿大土著语言符号补充字体使用加拿大音节脚本的语言;例如,因纽特语。Euphemia
切罗基语补充字体切罗基语。金雀花切罗基
梵文补充字体使用梵文脚本的语言;例如,印地语、孔卡尼语、马拉地语。Mangal
埃塞俄比亚语补充字体使用埃塞俄比亚语脚本的语言;例如,阿姆哈拉语、提格里尼亚语。Nyala
古吉拉特语补充字体古吉拉特语;使用古吉拉特语脚本的任何其他语言。Shruti
果鲁穆奇语补充字体旁遮普语;使用果鲁穆奇语脚本的任何其他语言Raavi
中文(简体)补充字体简体中文
中文(繁体)补充字体繁体中文MingLiU、MingLiU_HKSCS
希伯来语补充字体希伯来语
日语补充字体日语Meiryo、Meiryo UI、MS Gothic、MS Mincho
高棉语补充字体柬埔寨语;使用高棉语脚本的任何其他语言。DaunPenh、Khmer UI
埃纳德语补充字体埃纳德语;使用埃纳德语脚本的任何其他语言。Tunga
韩语补充字体韩语Batang、Dotum、Gulim
老挝语补充字体老挝语;使用老挝语脚本的任何其他语言。DokChampa、Lao UI
马拉雅拉姆语补充字体马拉雅拉姆语;使用马拉雅拉姆语脚本的任何其他语言。Karthika
奥里亚语补充字体奥里亚语;使用奥里亚语脚本的任何其他语言。Kalinga
泛欧语系补充字体无自动语言关联性。无(所有字体在 Windows 10 中都是新字体)。
僧伽罗语补充字体僧伽罗语;使用僧伽罗语脚本的任何其他语言。Iskoola Pota
叙利亚语补充字体使用叙利亚语脚本的语言。Estrangelo Edessa
泰米尔语补充字体泰米尔语;使用泰米尔语脚本的任何其他语言。Latha
泰卢固语补充字体泰卢固语;使用泰卢固语脚本的任何其他语言。Gautami
泰语补充字体泰语;使用泰语脚本的任何其他语言。Leelawadee
如果某个应用依赖于其中一种字体来显示特定的 Unicode 字符,并且没有利用 Windows 提供的字体回退机制,此外,如果系统中未安装包含该字体的可选字体包(通常是由于未将系统和用户配置文件配置为启用关联的语言),字符将最终显示为“方框”字形。

针对 Windows 10 用户的建议

如果您在 Windows 10 桌面版的某些应用中遇到这些问题,您可以向应用开发人员提供反馈,建议他们更新其适用于 Windows 10 的应用。同时,您还可以安装这些应用正常运行可能需要的一个或多个可选字体功能。 为此,请执行以下步骤:

如果您了解显示有误的文本的语言并且经常使用该语言,可以执行以下操作:

如果您了解所涉及的语言,可以将该语言添加到您的用户配置文件,所有关联的可选字体功能将自动安装。 (注意: 也可能安装与语言相关的其他可选功能,例如,文本预测或拼写检查)。
  • 从“开始”菜单中,打开“设置”
  • 选择“时间和语言”
  • 选择“区域和语言”
  • 选择“添加语言”
  • 选择特定语言。
在不更改语言设置的情况下启用可选字体功能:

如果您不了解特定的语言,或者了解显示有误的文本语言,但不想将该语言添加到您的用户配置文件中,可以安装所有可选字体功能,而无需启用任何其他语言。
  • 从“开始”菜单中,打开“设置”
  • 选择“系统”
  • 选择“应用和功能”
  • 选择“管理可选功能”
  • 选择“添加功能”
  • 从列表中选择任意可选字体功能。

如果您遇到某些 Windows Phone 应用中描述的问题,您可能希望联系应用开发人员,建议他们使用此处提供的指南更新其应用。 注意: Windows 10 移动版不支持任何可选字体功能。

针对 OEM 和系统管理员的建议

如果您配置的是 Windows 10 部署映像的语言包或国际化设置,则应使用部署映像服务和管理 (DISM) 工具加入与您添加到映像中的语言包相关联的可选字体包(以及其他可选的、语言相关的功能)。 下面的文章提供了有关可选字体功能以及关联的 Windows 10 语言包语言的详细信息:

https://msdn.microsoft.com/zh-cn/library/windows/hardware/mt171094%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

另请参阅下面的文章,了解 Windows 10 语言包以及所有可选的语言相关功能的概述:

https://msdn.microsoft.com/zh-cn/library/windows/hardware/dn898584(v=vs.85).aspx

如果您是系统管理员,已知您的方案需要一个或多个这些可选字体功能中的字体,即使您没有将关联的语言包加入部署映像,仍可以使用 DISM 将任意字体功能添加到部署映像。

针对开发人员的建议

如果您的 Windows Phone 应用依赖于 Windows 10 移动版中排除的任意一种字体,或者您的 Windows Phone 应用依赖于已迁移到可选字体包中的的任意一种字体,又或者您的应用没有利用 Windows 提供的字体回退机制,那么您的应用可能会因 Windows 10 中的字体变更而受到影响。 最有可能受到影响的应用类型和应用方案包括:
  • 使用不提供字体回退的级别较低的图形 API 进行复杂布局的浏览器或其他应用(例如,使用 ETO_GLYPH_INDEX、ScriptTextOut 的 DrawGlyphRun、ExtTextOut)。
  • 使用第三方图形库的游戏或其他应用。
  • 显示的文本涉及超出该应用或 Windows 显示语言范围的语言或用户使用的其他语言的应用方案;例如,Web 浏览、从其他用户处接收文本消息或通知。
如果您的应用(尤其是在上述方案中)体现出所描述的问题,则应该检查应用所依赖的字体。 请参阅以下文章,了解推荐给 Windows 10 上的应用使用的字体:

https://msdn.microsoft.com/zh-cn/library/windows/apps/hh700394.aspx#recommended_fonts

该文章中所列字体可以确保在所有 Windows 10 设备上显示。

如果您的应用使用 DirectWrite,您可能想要考虑利用 DirectWrite 提供的字体回退机制。 即使您使用的是级别较低的 API 并希望实现自己的字体回退,DirectWrite 的 API 可提供默认映射,供您用于对自己的自定义映射进行补充。 请参阅以下 MSDN 文章,了解主要的 API:

· IDWriteFontFallback: https://msdn.microsoft.com/zh-cn/library/windows/desktop/dn280450(v=vs.85).aspx

· IDWriteFactory2::GetSystemFontFallback: https://msdn.microsoft.com/zh-cn/library/windows/desktop/dn280450(v=vs.85).aspx

· IDWriteFontFallbackBuilder: https://msdn.microsoft.com/zh-cn/library/windows/desktop/dn280476(v=vs.85).aspx


属性

文章 ID:3083806 - 上次审阅时间:08/07/2015 07:51:00 - 修订版本: 2.0

Windows 10

  • kbsurveynew KB3083806
反馈