奇数字符:
ก็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็้ ... ก็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็้ ... ก็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็้ ... ก็็็็็็็็็็็็็็็็็็็็็็็็็็็็ก้้้้้้้้้
问题:为什么在 Windows* 中看到这些字符时,它们看起来如此奇怪?
以下是来自 Outlook 的一段代码,送给那些不必使用 Windows 的幸运儿:
有关的: 使用的字符编码是什么?
*Windows 操作系统。使用 GTK+ 等绘制文本的应用程序不会像LSD 之旅出了问题。
答案1
由于我似乎因为认为 Windows“做得对”而受到了一些打击,我觉得我应该发表一个答案来证明我的立场。
事实上,你拥有的文本正在告诉操作系统渲染大量的组合字符。一个操作系统实际上渲染了它们,而另一个却没有,这归因于许多问题。其中一个问题是彻底一个原因是程序员在编写代码来呈现它们时,太懒了,根本无法正确地实现它们。
基本上可以归结为书面语言是流动的,并且某些语言中的许多字符有多种不同的变音符号用来修改字符发音的变音符号。我们如何处理所有这些变音符号,我们是否给每个带有变音符号的字母一个新字符(这将产生大量新的几乎相同的字符)或者我们是否专门创建一组字符为了变音符号并减少我们的整体字母表?
Unicode 为我们提供了同时实现这两种功能的空间,但这样做时,必须呈现这些变音符号的程序员必须处理这样的事实:有些字符实际上有多个变音符号,一个在上,一个在下,然后程序员必须问一个问题:它们什么时候停止。他们可以将其限制为两个,并满足大多数人的需求,但忽略了那些想要或需要三个变音符号才能用自己的语言正式书写的人。
微软决定让用户决定一个人想要使用多少额外标记,无论对错。这条路需要相当优秀的程序员和一些艰难的合理化才能走下去。我完全支持他们允许这样做和他们确实这么做了出色地。
另一方面,如果这些字符缺失,我会想知道它们缺失的原因。是“我们在x
处理变音符号后就把它扔到地上”的决定,还是因为程序员太懒,没有正确地处理这个问题,并且可能会让我面临缓冲区溢出的风险,隐藏在变音符号中的代码会被传递出去并被系统执行?
这里的简单问题是实际渲染我可以看到系统正在做它被要求做的事情,而不是做它认为正确的事情,或者更糟的是,做一些潜在危害。
答案2
为什么在 Windows* 中看到这些字符时,它们看起来如此奇怪?
由于 Windows 尝试渲染大量 Unicode组合字符当您的文本包含它们时,即使没有实际的脚本会将那么多标记组合在一起。