为什么某些字符在 Windows 中绘制得非常糟糕,非常错误?

Mar*_*son 16 windows characters

奇数字符:

???????????????????????? ???????????????????????? ???????????????????????? ???????????????????????? ???????????????????????? ???????????????????????? ???????????????????????? ???????????????????????? ???????????????????????? ???????????????????????? ???????????????????????? ?????????

问题:为什么当您在 Windows* 中查看这些字符时,它们会画得如此奇怪?

这是 Outlook 的一个片段,供您那些没有被迫使用 Windows 的幸运混蛋:

东西

相关: 使用的字符编码是什么?

*Windows 与操作系统一样。使用 GTK+ 等绘制文本的应用程序不会像LSD 旅行出错那样显示这些内容。

Mok*_*bai 10

由于我认为 Windows“做得对”似乎受到了一些打击,因此我觉得我应该发布一个答案来证明我的立场。

事实是,您拥有的文本告诉操作系统渲染大量的组合字符。一个操作系统实际呈现它们而另一个操作系统没有呈现的问题是由于许多问题造成的。这些问题之一是程序员在编写代码以呈现它们时有多彻底,另一个是由于程序员太懒而无法正确实现它们,如果有的话。

基本上它归结为书面语言是流动的东西,并且某些语言中的许多字符有多个不同的变音符号,这些变音符号被应用于修改字符的发音。我们如何处理所有这些变音符号,我们是给每个带有变音符号的字母一个新字符(这会导致大量新的几乎相同的字符)还是我们专门变音符号创建一组字符并减少我们的整体字母表?

Unicode 为我们提供了同时执行这两种操作的范围,但是在这样做时,必须呈现这些变音符号的程序员必须处理这样一个事实,即有些字符实际上确实有多个变音符号,一个在上面,一个在下面,然后程序员有问他们什么时候停止的问题。他们可以将其限制为两个,让大多数人满意,但忽略那些想要或需要三个变音符号以便用他们自己的语言正式写作的人。

无论是对还是错,微软决定让用户决定一个人想要使用多少额外的标记。这条道路需要一个相当优秀的程序员和一些艰难的合理化来遵循。我完全支持他们都让这个他们做的其实很好

另一方面,如果这些字符丢失了,我想知道它们丢失的原因。是“我们在x变音符号之后把它放在地板上”的决定,还是因为程序员太懒而不能正确地做这件事,并可能使我暴露在一些缓冲区溢出中,隐藏在变音符号中的代码被传递出去以供执行系统?

这里的一个简单问题是,通过实际渲染这些字符,我可以看到系统完全按照它的指示去做,而不是做它认为正确的事情,或者更糟糕的是,做一些可能有害的事情。

  • 或者:为什么 Windows 绘制的字符非常糟糕,非常错误? (11认同)

Red*_*ick 4

当您在 Windows* 中查看这些字符时,为什么它们看起来如此奇怪?

因为当文本包含大量 Unicode组合字符时,Windows 会尝试呈现它们,即使实际的脚本不会将那么多标记组合在一起。