【问题标题】:Why some software can display all characters and some not?为什么有些软件可以显示所有字符而有些不能?
【发布时间】:2017-01-09 15:30:52
【问题描述】:

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

复制到:

  • Notepad/Notepad++:显示没有问题
  • LibreOffice Writer:它会更改字体系列以使其正常工作,如果您转换为 Lucida Console,则会出现方框
  • Windows:毫无问题地显示它
  • 控制台:它需要正确的 chcp 和一个字体系列(Lucida Console 在这里也显示方形框),如果我是对的,它可以显示它们

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

【问题讨论】:

标签: windows unicode font-family


【解决方案1】:

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

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

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

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

【讨论】:

  • LibreOffice 自己实现了这一点,它也尊重用户不这样做的请求。
  • (我检查了它是否适用于此评论)要更加关注,我需要转到“控制面板 -> 时钟、语言和区域 -> 区域和语言(?) -> 管理 -> 更改区域设置... -> 日语”并且只有在我可以选择 chcp 932 并且控制台可以正确显示字符串并使用可用的字体系列之后,这正是您所说的控制台,对吧?跨度>
  • @user7394862:我不明白你评论中的问题。
  • @AdrianMcCarthy 如果我将区域设置更改为日语 + 在控制台中设置 chcp 932,我可以正确显示日语字符。我只是检查一下这个结果是否符合你的解释。
  • @user7394862:是的,这与我的解释一致。
猜你喜欢
  • 1970-01-01
  • 2015-03-30
  • 2014-03-19
  • 2020-07-25
  • 2017-01-27
  • 1970-01-01
  • 2016-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多