引号字符种种

quotation-marks引号,这个存在于所有键盘上的符号,我最近发现我对它并不了解。在我点击键盘上的引号按键时,得到的并不总是同一个字符。常见的有这三种 ”〞”,这些看起来差不多的双引号对机器来说完全不同,而且差别不仅仅是全角和半角,不同的字符又可能在不同的字体中看起来完全一样!所以当我不得不使用富文本编辑器的时候总是无法抑制内心的烦躁(尤其是office中爱自作聪明的“自动更正”功能)。单引号的情况也类似,而且还有个添乱的——Linux脚本中常用的“反引号”(数字1左侧的字符),让这种混乱局面雪上加霜。
我决心摆脱这个困惑,于是到“Unicode字符百科”中系统检索了一下, 结果发现了一个大坑……

从形态上看,引号有两种:直引号(straight quotes,也称dumb quote)和弯引号(curly quotes,也叫智能引号,smart quotes)。前者源于早期计算机字符系统对书写规则的简化;而后者则根植于出版印刷界的规范和传统。在人机交互的场景中,程序员们始终坚持使用最小的字符集(键盘所代表的ASCII字符集)来进行输入,在这个国际编码规范中只有半角的单双引号是合法的引用符号。但在用于桌面出版的编辑器中,弯引号以及斜引号才足够清晰规范。所以office会默认将直引号替换为弯引号。在计算机系统不断满足工业需求的过程中,日益扩大的字符集也包含了许多冗余,加上程序员们对出版规范的一知半解,错误的符号使用便一发不可收拾。
常见的类似引号的符号有下面几种:

  • :半角单引号 Apostrophe,源自ASCII字符集,Unicode字符集编号 U+0027。在大多数编程语言中用于定义字符串,可与双引号通用。在Unix/Linux命令中表示强引用,其中包含的所有特殊字符均作为普通字符处理。
  • :半角双引号 Quotation Mark,源自ASCII字符集,Unicode字符集编号 U+0022。在大多数编程语言中用于定义字符串,可与单引号通用。在Unix/Linux命令中表示弱引用,所包含的特殊字符仍有效。
  • ` :抑音符 Grave Accent,也就是汉语拼音中的“去声”。Unicode字符集编号 U+0060。这是ACII编码出于国际化的考虑而加入的字符。但是对于大部分无此需求的用户来说就如同鸡肋。不过对于程序员来说,键盘上的每一个按钮都是不可浪费的宝贵资源,他们很快就为它找到了新的用途,并重新命名为“反引号”(backquote, backtick)。例如在排版语言TeX中,反引号被视作左单引号,而两个连写的反引号则是左双引号。在Unix/Linux,Perl,Lisp等环境中,反引号所包含的命令都会在执行后返回结果用于后续的调用。

上面这三个符号都是国际通用的,不需要借助任何输入法便可直接输入显示。所以它们几乎被用在所有的程序语言中。这样的符号对于机器来说不难识别,但是对于阅读者来说未免不够美观清晰。于是现代的字符集中陆续增加了下面的符号:

  • “” :左右双引号 Left/Right Double Quotation Mark,Unicode字符集编号 U+201C/D。就像语法书上讲的那样,用于引用和强调。和直引号相比因为有了方向,指示性好了很多,是文本中的规范符号。由于中文直接使用这两个地址表示全角双引号,所以全角双引号和半角双引号的区别只在于字体。
  • ‘’ :左右单引号 Left/Right Single Quotation Mark,Unicode字符集编号 U+2018/9。在文本中用于双引号之内,或者表示归属(Tom’s cat),省略(I’m)。需要特别注意的是,不表示引用的弯引号叫做Apostrophe!虽然它外形上和右单引号一致,在计算机中也用的是对方的字符。但是它在英语文法中叫Apostrophe,而且对应的并不是计算机编码中的Apostrophe符号!所以题图并没有错,其中注明的是各个符号在英语文法中的名称,而非对应计算机符号的名字(左侧的符号用法都是错误的)。
  • :上标符 prime,Unicode字符集编号 U+2032。这个字符虽然看起来有点像单引号的变体,但它们完全不同。这个符号只用于表示各种单位(英尺,角分,分钟),或者数学上的一阶导数(我的数学老师叫它“一撇”,音义俱佳)。
  • :双上标符 double prime,Unicode字符集编号 U+2035。和上面的符号一样,它表示英寸、角秒、秒,或者二阶导数等。
  • 〝〞 :斜引号 Double Prime Quotation Mark,Unicode字符集编号 U+301D/E。在东亚的语言中,确实有将类似双上标符的标记作为引号使用的习惯。因此中日韩CJK编码中又补充了这一对独立的斜引号。
  • :全宽引号 Fullwidth Quotation,Unicode字符集编号 U+FF02。直双引号对应的全角版本。

prime

写到这里,情况已经基本清楚了:ASCII字符集中所包含的单双引号是过去计算机性能不足时的权益之计。现在只在编程领域沿用。今天,弯引号和上标符已经能够基本满足出版界的要求,前两个符号便被放弃了。但是,实际应用并没有这么简单。字体的存在让这些字符之间的界限变得模糊起来。下面是我整理的Unicode字符集中类引号字符在不同字体下的形态列表:

quotation2

quotation

我一共选择了7个字体,分别是windows系统默认的等线字体(有最全的字库),中文无衬线字体:黑体,中文衬线字体:宋体,英文无衬线字体Arial,英文衬线字体Times New Roman,windows命令行终端默认的等宽字体Courier New,以及我最常用的等宽字体Consolas。

可以看到黑体的字形还是很忠于字符本来的设计,只是缺少个别非常用字符;而应用广泛的宋体则将早期的单双引号直接本地化,与右单引号和双上标符重复,在视觉上无法区分,原本的直双引号又由全宽引号对应;Arial 和 Times 的字形也很清楚,虽然缺少一些字符但不影响日常使用;而Courier把弯引号全部变成斜引号的做法未免太偏激了,就好像它的程序员受了编辑什么刺激似的……你看人家Consolas就平和多了。

再加上各家输入法在不同设置下给出的结果经常有所出入,这让凌乱的引号用法变得更加不堪了……
所以现在能做的就是弄清楚自己工具的特点,选择喜欢的字体,能够得到自己想要的字符就好。
语言是活的,未来规则会变成什么样,谁知道呢~
air quotes

订阅评论
提醒

1 评论
最旧
最新 最多投票
内联反馈
查看所有评论
hu
2016 年 8 月 30 日 14:18

居然更新了~~~