发现显示英文弯引号其实是一个大问题,特别是弯右单引号
usage of english quote as u2018, u2019, u201C, u201D
zping
quoteasciiunicodeapostrophefontscjk
1488 字
2025-07-16 02:07 +0000
这篇说的是统一字符码(Unicode)中的四个弯引号(即 0x2018 / ‘, 0x2019 / ’, 0x201C / “, 0x201D / ”)。当然重点是弯右单引号(0x2019 / ’)。
先谈一下历史,英文本身其实是存在弯引号的。但是英文从十九世纪后期开始,工业化导致了打字机的普及,而大部分打字机出于简单的成本算计,简化了许多标点的用法,其键盘上也就没有弯引号。
到了电报和计算机发明的时代,其输入设备自然使用的也是英文打字机。这样就导致最早的电传字符码表中就没有弯引号。如果去看二十世纪六七年代的标准,像 ascii 可以发现一个有意思的点。它的表中的引号其实有三个,第一个就是引号(Quotation Marks),即现在被称为直双引号(0x22)的字符;第二个则是撇号缩略符,同时用作闭单引号(Apostrophe (Closing Single Quotation Mark; Acute Accent)),即现在称为直单引号(0x27)的字符;第三个是重音符号,同时用作开单引号(Grave Accent (Opening Single Quotation Mark)),即(0x60)。熟悉早期 Unix 文档或者 TeX 编程的可能都会注意到,这个其实就是他们表示开闭(左右)单双引号的方式。排版软件本身有功能会将这种区分渲染出来。但英文文本本身并不包括弯引号。这里重点其实是缩略号的存在。这个东西在英文中不光表示缩略字符,而且也是所有格符号,而在同时也是闭单引号。
如此,那个时期的英文电报之类的文本,还有大量办公产生的文档中自然不存在弯引号这种东西。方便读者阅读的弯引号只在正式印刷品上会出现。这个状态会一直持续到新世纪。
此事对同期的西欧文字没有什么影响,至少对于法语来说,他们不会在乎。因为法语中的引号并不是什么弯引号,而是折角引号(«»),这个后来在八十年代的标准 ISO/IEC 8859-1 中会有体现。不过他们确实对缩略号有需求。现代中文从五十年代制订标点符号标准时,就有使用弯引号的需求。到八十年代,中文编码标准制订时也编入了单双引号,像 GB2312-1980 里就给四个弯引号编了码(即 0xA1AE 0xA1AF 0xA1B0 0xA1B1)。
九十年代的统一码对各国引号的处理让人觉得有一种随意性。无论是中文引号,还是英文引号都是一个编码。我反正不明白如此庞大的编码空间,他们一定要节约四个码位是什么意思。当然如果仅仅是引号的话,问题并不大。只是前文有提到最早英文电子文本中的闭单引号,并不是闭单引号,而是撇号缩略符兼职的闭单引号。统一码一开始其实有考虑这个问题,设置了另一个码位 U+02BC ʼ MODIFIER LETTER APOSTROPHE 作为推荐的撇号码位。不过,这个设计并没有为时人接受,也没有延续下来。本世纪以来,比较现代的英文文本会直接使用右单引号(0x2019)作为缩略号,甚至也为统一码标准所推荐。
之所以会出现这种情况其实还是输入设备的锅。哪怕到了本世纪,键盘仍是百年前的设计,只有一个早期 ascii 码表中的 0x27 键。对于文字处理软件来说,当用户敲下这个键时,需要处理两种还是三种可能性,实现的复杂度并不一样。大量英文文本为了减少输入和排版上的麻烦,直接用统一码中的右单引号表示撇号缩略符。单独设计的撇号缩略符(0x02BC)无人问津。
最终,今天处理中文混排西欧文字的纯文本,选择何种字体其实是一个相当麻烦的问题。英文文本中出现撇号缩略符的频率甚至高于个别字母,一段英文确实可以没有单引号,但几乎不可能不出现撇号。而中文的右单引号和西欧文字中的撇号缩略符很大概率是同一个编码。那么当使用东亚文字字体时,西欧文字中缩略符的显示肯定会出问题;反过来,中文中右单引号的渲染也不会理想。一些等宽又会对引号作特别处理的拉丁字母字体,比如说 Source Code Pro ,可能是当前唯一的选择。
排版使用的格式,如 html 文件中,也不光是东亚文字的混排需要为不同的文字段落指定合适的渲染字体,只要这个文字使用了引号这类就必须考虑指定不同字体。