2012-12-05 48 views
18

假设我们有一个包含Unicode字符的文本,因为我们的字体没有相应的字形,所以无法显示。通常,会显示占位符,例如,一个矩形块thingy(见截图)。有没有“字形找不到”字符?

是否存在可靠地产生该字形的“找不到字形”字符?我想在UI中写入类似"If the following text contains <insert character here> then you need another font..."的内容。

顺便说一下,我不是在谈论 (replacement character)。当一个Unicode字符不能从数据流正确解码时显示此字符。这并不一定产生相同的字形:

enter image description here

+0

矩形**是**“找不到字形”的字形。不要帮忙。 –

回答

7

不,没有“字形未找到”字符。不同的程序使用不同的图形演示。一个空的狭长矩形是一种常见的渲染,但不是唯一的。它也可以是一个带有问号标记的矩形或十六进制字符的代码号。

所以最好是例如显示字符本身的小图像,以便读者可以比较它们。

+0

在几款Android手机上,缺少的字形只有几个像素的空白空间。所以它甚至不一定是可见的东西。 – nibarius

3

字形未找到字符由字体引擎和由字体指定;它没有固定的字符。

+0

这个问题清楚地表明它不是关于替换字符,而替换字符U + FFFD *是一个固定字符(它没有固定字形,尽管包含它的字体倾向于使用非常相似的字形)。 –

+0

@Jukka:除了我不是在谈论U + FFFD。 –

+1

然后不要使用短语“替换字符”,因为a)它根本不是字符,b)它不是具有Unicode名称REPLACEMENT CHARACTER的字符,以及c)人们很容易混淆像这样的问题。 –

2

使用像U + 10FFFF这样的非字符(在Unicode空间的最后),99.99%肯定不会在任何理智字体的cmap表中找到。至少没有已知的Windows系统字体将非字符映射到字形,并且极不可能有任何Linux/Mac系统字体。即使是所有包含Last Resort字体(http://www.unicode.org/policies/lastresortfont_eula.html)的地图都不会映射它。因此,虽然没有在Unicode中定义的官方“glyph not found”字符将映射到.​​notdef字形,但实际上,上述非字符实际上保证显示该字形,无论该字形设计是哪种字体。 .notdef字形(OpenType中的字形标识0)可能是一个简单的空心矩形(标准),带有x的框,带问号的框,偶尔空白(这是不好的做法),有时甚至是奇怪的事情,像螺旋(Palatino Linotype) 。

10

从Unicode的规格:

U+25A1□白色正方形

  • 可以用于表示缺少表意文字

  • U+20DE $⃞结合封闭方形

+0

我已将您的编辑回退到Jukka K. Korpela的答案。请在此答案中包含该信息和/或向其他答案添加评论。 –

+0

为什么不只是包含那里的信息并删除这个答案? – Michaelangel007

+0

很好的答案。 – martin

0

Unicode使用这些术语:

  • 替代字形
  • 缺失字形
  • 解释,但unrenderable字符

Unicode标准(10.0)做没有定义他们如何看,但它建议在c章节5.3 [PDF]该实施方式中显示

[...]鲜明字形,让他们的类型的一些一般表示[...]

从 “未分配的代码点” 区分开来。他们给一些例子:

Unicode的glossary entry says

它常常显示为一个开放或黑色矩形。


TL;博士:没有标准的外观/字形,这取决于执行。为了帮助用户,实现可以显示标志符号,表明它不能显示的字符类型。

相关问题