正确的单撇号与撇号?
Posted
技术标签:
【中文标题】正确的单撇号与撇号?【英文标题】:Right single apostrophe vs. apostrophe? 【发布时间】:2011-10-06 09:57:37 【问题描述】:右单引号 (U+2019) 对比 撇号 (U+0027)
这两个字符有什么区别?
我遇到了这个问题,我使用 CAtlString 从资源文件加载字符串,在某些 Windows 安装中,LoadString 在尝试加载包含 U+2019 的字符串时失败,但它适用于其他一些 Windows 安装. U+2019 字符出现在我从 Word 复制的资源文件中的字符串中,而 U+0027 出现在我手工编码的字符串中。为什么 LoadString(有时)会因此而窒息?
【问题讨论】:
【参考方案1】:这两个字符有什么区别?
有争议!
从名字上看,可以想象卷曲的‹'›仅用作引号,而直的‹'›仅用作真正的撇号,即省略字母的指示符。
然而,传统的英文排版习惯总是使用卷曲的‹'›来呈现撇号。就个人而言——我可能一个人在这里——我不喜欢这样。它可以使阅读更加模棱两可:
“他说,‘这是炸鱼薯条’……”
撇号是直的,引号的结束位置(稍微)更清楚:
“他说,‘这是炸鱼薯条’……”
撇号“直”对我来说更有意义,因为它表示省略字母的目的没有内在的方向性,而引号显然是不对称的。
在传统的 ASCII 中,当然,没有智能引号,所以撇号总是用于两者...
在某些 Windows 安装中,LoadString 在尝试加载包含 U+2019 的字符串时失败,但在某些其他 Windows 安装上有效。
在这里,您遇到了“ANSI”代码页的可怕之处。这是一个默认字符编码,在不同的 Windows 安装区域设置中是不同的。因此,在西部地区的机器上,读取资源与在日文 Windows 上读取资源时会得到不同的结果。
非常不幸的是,Windows 具有不同的默认代码页,而不是使用像 UTF-8 这样的单一全局编码,但现在修复为时已晚。如果您将整个应用程序编译为 Unicode 应用程序(因此您将使用 LoadStringW
而不是 LoadStringA
),那么您可以更好地处理智能引号等非 ASCII 字符。
如果您无法迁移到 Unicode 应用程序,那您就有点卡住了。您将无法在全局范围内处理智能引号等非 ASCII 字符,因此请仅使用直撇号 ‹'› 等 ASCII 字符。
U+2019 字符出现在我从 Word 复制的资源文件中的字符串中
是的,Word 有一个烦人的自动更正功能,可以用智能引号替换您键入的所有撇号。这在处理代码时尤其不受欢迎,因为‹'›会破坏程序;但即使是简单的古英语也是错误的,因为无法正确猜测所需的引用方向。 (例如,它会以错误的方式得到“fish 'n'chips”中的撇号之一。)
我建议关闭自动替换智能引号功能。如果您想要智能引号,最好故意输入它们。不幸的是,它们在大多数键盘布局上打字都不方便,通常需要晦涩的 Alt+数字键盘序列。我个人使用this one 将它们放到 Alt+[] 键上。
【讨论】:
很棒的答案 - 非常彻底!感谢您花时间给出如此深入的解释。 您绝对不是唯一一个认为它是错误的人。 ;) 但是,从历史上看,卷曲的字符更正确,实际上是 UTF 中推荐的撇号字符(不幸的是)。更多细节可以在这里找到:quora.com/… 这里有一篇有趣的相关文章cl.cam.ac.uk/~mgk25/ucs/quotes.html ‘我不喜欢这个。它可以使阅读更加模棱两可[... W]如果撇号是直的,它(稍微)更清楚引号的结束位置[.]' 这实际上不是撇号的问题,而是英文中选择的引号引起歧义.在欧洲大部分地区(英格兰除外),首选字符是 guillemets(«I'm ‹not›a quote»),以消除任何歧义。当可以访问 UTF8 时,绝不应将撇号替换为 U+0027 撇号。有关参考和操作方法,请查看practicaltypography.com/apostrophes.html。【参考方案2】:从历史上看,单引号和双引号成对出现,左(打开)和右(关闭)。
多年来,计算机的字符集受到限制,每个字符集都只有一种形式。
现在,随着 Unicode 的出现,可以使用完整的表单,但对它们的支持仍然有限。编程语言仍然使用简单的形式,而完整的形式仍然会导致问题。
【讨论】:
以上是关于正确的单撇号与撇号?的主要内容,如果未能解决你的问题,请参考以下文章