引号

文本中用于标示引用、对话、强调等的符号。不同语言和地区使用不同形式的引号,如弯引号 (中文、英文)、直角引号 (繁体中文、日文)、书名号《》以及法文的尖角引号 «» 等,种类繁多。

引号 (quotation mark) 是用来标示引用他人的话、标示作品名称、标示以特殊含义使用的词语的标点符号。中文里成对的弯引号 (U+201C 与 U+201D) 和单引号 (U+2018 与 U+2019) 是标准,英文出版物里用的也是同一组字形,而繁体环境和日文里的标准则是直角引号 (U+300C 与 U+300D) 与双直角引号 (U+300E 与 U+300F)。每种语言的引号在形状和用法上都不一样,处理多语言文本时需要特别注意。

中文的引号用法在国家标准 GB/T 15834《标点符号用法》里有明确规定。直接引用和对话用双引号,引号里面再套引用时用单引号;书名和篇名不用引号,而是用书名号《》和〈〉。地区差异也需要留意:中国大陆以弯引号为标准,台湾地区传统上使用直角引号,竖排时大陆标准也允许使用直角引号的竖排字形 (U+FE41 至 U+FE44)。中文的引号是全角字符,因此在单纯的字符计数里,开引号和闭引号各占 1 个字符。而在 X (原 Twitter) 这类加权计数里,弯引号 (U+201C / U+201D) 的权重各为 1,每加一对引号消耗 2 个单位,相当于 1 个汉字的配额。

英文的引号分成两类:开合字形不同的一类 (smart quotes、curly quotes),以及开合共用同一个字形的直立的一类 (straight quotes)。前者的双引号是 U+201C 和 U+201D,单引号是 U+2018 和 U+2019,用在出版物和文字处理软件里。后者的双引号是 U+0022 ("),单引号是 U+0027 ('),来自打字机的键盘布局,用在编程和纯文本里。在 Unicode 上它们是彼此不同的字符,因此搜索和比对时不会互相匹配,字符计数也会当成不同的字符来数。两者字形相近,在屏幕上很难分辨,要确认实际用的是哪一个,去看码位才可靠。

在编程中,引号是字符串字面量的定界符,具有语法意义。JavaScript 中可以使用 "hello"、'hello'、`hello` (模板字面量) 三种形式。Python 同样可以不加区别地混用 " 和 ',但字符串内部要包含引号时,需要转义 (\") 或者改用另一种引号来包裹。

引号的智能转换是字符计数上的一个陷阱。Microsoft Word 的自动更正和 macOS 的文本输入设置里都带有把输入的直引号自动替换成弯引号的功能,有时候还是默认开启的。U+0022 在 UTF-8 里是 1 个字节,而 U+201C 和 U+201D 是 3 个字节,因此在用字节数来卡上限的场合,经过复制粘贴的文本长度可能会出乎意料。这个差距靠 Unicode 规范化也填不平:全角的引号 U+FF02 经 NFKC 会变成 U+0022,而弯引号即使做 NFKC 也不会发生变化,所以想在搜索和判重时把它们视为同一个字符,就得自己去做替换。

面向多语言时,引号的种类还会进一步增加。法语用尖角引号 (guillemets) «» (U+00AB 与 U+00BB),并在引号的内侧放入不换行空格,这个空格同样会被算作 1 个字符。德语用位于下方的 U+201E 开头、用 U+201C 收尾,单引号用 U+201A 和 U+2018。俄语主要使用尖角引号,其内部再出现的引用用 U+201E 和 U+201C。中文自身的地区差异在前文已经提到,若以码位来说,简体字地区用 U+201C / U+201D (单引号是 U+2018 / U+2019),繁体字地区用直角引号 U+300C / U+300D 和 U+300E / U+300F。翻译时如果把原文语言的引号原样留下来,会和错别字一样显眼,所以应该把引号的替换列入本地化的检查项目。

分享这篇文章