为什么某些字符在Windows中绘制出可怕的,可怕的错误?


16

奇数字符:

ก้้้้้้้้้้้้้้้้้้้้ก็็็็็็็็็็็็็็็็็็็็กิิิิิิิิิิิิิิิิิิิิกิิิิิิิิิิิิิิิิิิิิกิิิิิิิิิิิิิิิิิิิิ

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

这是Outlook中的一小段代码,适合那些没有被迫使用Windows的幸运混蛋:

东西

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

* Windows与OS中相同。使用GTK +等绘制文本的应用程序不会像LSD行程出错那样显示这些内容。


您是说在Windows机器上,您在问题中键入的字符看起来像图像中的字符吗?因为在Windows计算机上键入的字符看起来不错。
dsolimano 2012年

1
您的问题包含没有根据的主张-Windows将其绘制为“错误”。如果您说出您认为应该如何绘制它们以及Windows绘制它们的方式到底有什么问题,那将有帮助。
大卫·史瓦兹

2
我很想知道其他操作系统是如何处理的,我只看到Windows是如何做到的,对我来说似乎“正确”。
Mokubai


Answers:


10

我似乎因为认为Windows在“做对了”而大受打击,所以我觉得应该发布答案以证明自己的立场是正确的。

事实是,您所拥有的文本正在告诉操作系统渲染大量的组合字符。一个操作系统实际上呈现它们而另一个操作系统没有呈现的问题是由于许多问题所致。其中一个问题是程序员在编写代码以呈现它们时有多彻底,另一个是由于程序员太懒惰以至于无法正确实现它们。

基本上,可以归结为书面语言是易变的事物,某些语言中的许多字符具有多种不同的变音符号,这些变音符号被用来修改字符的发音。我们如何处理所有这些变音符号,我们如何给每个变音符号一个字母一个新字符(这将导致大量新近相同的字符),或者我们创建一组专门用于变音符号的字符并减少我们的变音符号?整体字母?

Unicode使我们可以同时进行这两种操作,但是这样做的话,不得不渲染这些变音符号的程序员必须处理这样一个事实:有些字符实际上确实具有多个变音符号,一个在上面,一个在下面,然后程序员拥有问他们什么时候停止的问题。他们可以将其限制为两个,并满足大多数人的需求,但忽略那些想要或需要三个变音符号以便以自己的语言正式写作的人。

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

另一方面,如果这些字符丢失了,我想知道为什么它们会丢失。是“我们在x变音符号之后就把它丢在地板上”的决定,还是由于程序员太懒惰而无法正确执行它,并可能使我暴露于变音符中隐藏的代码的某些缓冲区溢出,而这些代码被散发给执行者。系统?

这里的一个简单问题是,通过实际渲染这些字符,我可以看到系统正在完全按照要求执行操作,而不是执行它认为正确的操作,或者更糟的是执行可能有害的操作


11
还是:Windows为什么如此好地绘制可怕的,可怕的错误字符?
mtone 2012年

覆盖他人的文字符合我的书中“潜在有害”的标准。(也许被掩盖的信息很重要。)顺便说一句,我的首选解决方案是某种形式的剪切,而不是对变音符号数量的限制。(如果确实有一些语言使用的字符与相邻行上的字符重叠,那么我不在乎!)
哈里·约翰斯顿

此外:由于MS不太可能在短期内改变这种行为,因此Facebook和接受用户数据的其他网站可能会尝试自行清理字符集,以防止恶作剧者滥用此“功能”。不幸的是,消毒过程可能会产生不良的副作用。如果Windows剪切了输出,则没有必要。
哈里·约翰斯顿

4

在Windows *中查看这些字符时,为什么它们绘制得如此奇怪?

因为Windows会尝试在文本包含字符的情况下呈现大量Unicode 组合字符,即使没有实际的脚本将这些标记组合在一起也是如此。


据推测,这意味着Windows可以按照实际要求“正确执行”,而不是对可以使用的组合字符施加限制。
Mokubai

另请参见superuser.com/questions/389333/…,这似乎表明此类技巧已在Facebook中流行。
Jukka K. Korpela 2012年

@Mokubai:事实是,这是不受信任的数据-来自互联网的数据。如果不一定符合用户的最大利益,Windows不必执行不受信任的数据所要求的操作。
哈里·约翰斯顿

1
@HarryJohnston如果显示所有变音符号,我会更担心,请查看我的回答。
Mokubai
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.