为什么有些软件可以显示所有字符,有些则不能

时间:2017-01-09 15:30:53

标签: windows unicode font-family

参考文字:どうもありがとうございました

复制到:

  • Notepad / Notepad ++:显示没有问题
  • LibreOffice Writer:它改变了字体系列,如果转换为Lucida控制台,则出现方框
  • Windows:显示没有问题
  • 控制台:它需要正确的AGE_IN_DAYS和一个字体系列(Lucida控制台也在这里显示方框),如果我是对的,可以显示它们

是否可以解释为什么记事本可以在任何字体系列中显示任何文本而LibreOffice + Console不能?差异在哪里?例如,记事本可以在控制台上具有相同的行为吗?

1 个答案:

答案 0 :(得分:4)

某些Windows字体有许多不同脚本的字形,有些包含几个脚本,而且很多只包含一个脚本。 (支持许多脚本的字体有时被称为“Unicode字体”,这可能是一个误导性的术语。在其他操作系统中,这些字体更为普遍.Windows本身不附带任何,但我认为你得到一两个使用Office套件。)

当您尝试使用一种众所周知的字体使用标准Windows函数在多个脚本中输出文本时,Windows使用font fallback and/or font linking,它会根据需要自动切换字体以输出整个字符串。因此,大多数程序(如Notepad和Notepad ++)都会自动覆盖。

我还没有阅读过LibreOffice代码,但我怀疑当你为一段文本选择一种字体时,它会坚持使用该字体,从而有效地阻止了Windows的字体回退和字体链接机制的帮助。这并不奇怪,因为WYSIWYG编辑器可能会使用较低级别的API来输出文本,以便进行更多的排版控制。但是使用较低级别的API意味着你不会免费获得后备和链接,所以你必须自己实现它,这是很多额外的工作,对很多用户来说可能并不重要。

Windows控制台具有许多遗留问题和限制因素,以便与旧程序向后兼容。控制台主要模拟DOS系统,它没有任何类型的Unicode支持,而是依赖于“代码页”,粗略地说,它是字符值和字形之间的替代映射。代码页面仅适用于一个(或两个)脚本,因此如果您需要来自其他脚本的字符,那么您基本上就不走运了。我认为现代版本的Windows已经破解了对支持UTF-8的伪代码页的一些支持,但我从来没有让它运行良好,它也有局限性。