右单引号(U+2019)与后缀(U+0027)
这两个字符有什么不同?
我遇到了这个问题,我使用CAtlString从资源文件中加载字符串,在某些Windows安装中,当尝试加载包含U+2019的字符串时,LoadString会失败,但它在其他一些Windows安装中可以正常工作。U+2019字符出现在我从Word复制的资源文件中的字符串中,而U+0027出现在我手工编码的strings中。为什么LoadString (有时)会被这个问题卡住呢?
发布于 2011-07-15 21:14:47
这两个字符有什么区别?
有争议!
根据名称,人们可能会认为卷曲的<‘>只是用作引号,而直的<’>只是用作真正的撇号,即省略字母的指示符。
然而,英语的传统排版实践总是使用卷曲的<‘>来表示撇号。就我个人而言--我可能是一个人在这里--我不喜欢这样。它可以使阅读更加模棱两可:
“他说,‘这是鱼和薯条’...”
由于撇号是直的,所以(稍微)引号的结尾更清晰:
“他说,‘这是鱼和薯条’...”
对我来说,撇号是“直的”更有意义,因为它表示省略字母的目的没有固有的方向性,而引号显然是不对称的。
当然,在传统的ASCII中,没有智能引号,因此撇号总是用于这两个...
在某些Windows安装上,当尝试加载包含U+2019的字符串时,LoadString会失败,但它可以在其他Windows安装上运行。
在这里,您将遇到‘ANSI’代码页的可怕之处。这是默认的字符编码,在不同的Windows安装区域设置中是不同的。因此,在西部地区的机器上,当您在日语Windows上阅读资源时,您会得到不同的结果。
非常不幸的是,Windows有不同的默认代码页,而不是使用单一的全局编码,如UTF-8,但现在修复为时已晚。如果您将整个应用程序编译为Unicode应用程序(因此您将使用LoadStringW
而不是LoadStringA
),那么您可以更好地处理非ASCII码字符,如智能引号。
如果您不能迁移到Unicode应用程序,那么您就有点被卡住了。您不能像全局智能引号那样处理非ASCII字符,因此只能使用ASCII字符,如直撇号<‘>。
U+2019字符出现在我从Word复制的资源文件的字符串中
是的,Word有一个恼人的AutoCorrect功能,它将您键入的所有撇号替换为智能引号。在处理代码时,这尤其不可取,因为<‘>会破坏程序;但即使对于普通的英语,这也是错误的,因为不可能正确地猜测引号的所需方向。(例如,它会将“fish 'n‘chips”中的一个撇号换成相反的方式。)
我建议关闭自动替换为智能引号功能。如果您想要智能引号,最好是有意地键入它们。不幸的是,它们不方便在大多数键盘布局上键入,通常需要晦涩的Alt+numpad序列。就我个人而言,我使用this one将它们放到Alt+[]键上。
发布于 2011-07-15 19:09:47
从历史上看,单引号和双引号是成对出现的,左边(打开)和右边(关闭)。
多年来,计算机的字符集非常有限,每种字符集都只有一种形式。
现在,随着Unicode的出现,完整的表单已经可用,但对它们的支持仍然有限。编程语言仍然使用简单的表单,而完整的表单仍然会造成问题。
https://stackoverflow.com/questions/6711892
复制相似问题