3

我正在尝试使用(例如)Windows GDI 在我的程序中显示一些文本,并且某些 unicode 字符显示为框?怎么了?

另请参阅:当我的文本显示为问号时,这意味着什么?

4

5 回答 5

15

(T 恤图片来自http://www.cafepress.com/nucleartacos.163046834

上图表示文本显示系统的常见故障模式,它未能考虑到所有 Unicode 字符。在 Windows 平台上,无法使用任何可用字体表示的字符用一个开放的矩形表示。

于 2008-10-20T00:48:32.093 回答
6

通常,这意味着指定的 unicode 字符在该特定字体中不可用。尝试将字体更改为跨国字体之一,它应该会消失。

于 2008-10-20T00:46:09.133 回答
5

在 Windows 中,尝试显示 Unicode 字符时会出现 2 个常见的显示问题:

  1. 文本有时显示为问号

    • 当 Unicode 数据通常通过系统代码页(但可以在转换调用中指定其他代码页)转换为 8 位字符集编码(或技术上的多字节字符)时,就会发生这种情况。如果目标 8 位字符集不包含所需的字符,则目标字符集中无法表示的任何字符都将转换为问号。
  2. 文本有时显示为框

    • 这是字体没有特定字符的 glpyh 的问题。当文档中的 Unicode 字符与字体支持的字符不匹配时,会出现框。具体来说,这些框表示所选字体不支持的字符。
于 2008-10-20T01:08:11.010 回答
1

问题是您尝试显示的文本包含您使用的字体不支持的字符。方框字符是字体中没有字形的 Unicode 文本的默认替换字符。

在 Windows 上,如果您尝试以多种不同语言显示文本,请使用 Arial Unicode MS 等字体 - 这包括大量不同语言的字形。它是一种“最小公分母”字体 - 字形通常会存在,但通常缺少字符,并且某些字形彼此相邻看起来会有些奇怪。

于 2008-10-20T00:47:26.777 回答
0

我在 Chrome for Win10 上遇到相同的框/字符/文本问题大约 2 年,并尝试了所有建议的修复,但没有一个对我有用。我的问题是由我没有考虑过的应用程序引起的。我使用 uBlock Origin 来减少弹出广告。默认情况下,uBlock 还“阻止此站点上的远程字体”,实际上是每个站点。当字体被阻止时,Chrome 会插入一些东西来代替它,通常是一个简单的正方形或矩形。如果没有其他工作,请检查您的广告拦截器。该功能可以轻松关闭,然后显示所有正确的文本。

于 2020-02-29T16:14:51.567 回答