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

Why some software can display all characters and some not?

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

复制到:

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

一些 Windows 字体具有适用于许多不同文字的字形,一些涵盖几种文字,而许多只涵盖一种文字。 (支持许多脚本的字体有时称为 "Unicode fonts,",这可能是一个误导性术语。在其他操作系统中,这些字体更为普遍。Windows 本身不附带任何字体,尽管我认为你使用 Office 套件获得一两个。)

当您尝试使用标准 Windows 函数在多个脚本中输出文本时使用一种知名字体,然后 Windows 使用 font fallback and/or font linking,它会自动在字体之间切换需要输出整个字符串。大多数程序,如 Notepad 和 Notepad++,都会自动覆盖。

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

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