正确的单撇号与撇号?

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 的出现,可以使用完整的表单,但对它们的支持仍然有限。编程语言仍然使用简单的形式,而完整的形式仍然会导致问题。

【讨论】:

以上是关于正确的单撇号与撇号?的主要内容,如果未能解决你的问题,请参考以下文章

使撇号在 perldoc 中正确呈现

模板-haskell中的单双引号/撇号有啥区别?

带撇号的 Python 标题()

javascript反斜杠 “\” 的有啥特殊作用?

撇号的 HTML 代码

c中关于转义字符!!