关于排版和字符集
关于引号
和句点/句号、逗号、问号、感叹号等标点符号不同,中英文的单双引号使用的是同一组Unicode码元:
“[U+201C] Left Double Quotation Mark “左双引号””[U+201D] Right Double Quotation Mark “右双引号”‘[U+2018] Left Single Quotation Mark “左单引号”’[U+2019] Right Single Quotation Mark “右单引号”
这导致在混合排版过程中,即使分别指定了中英文语言字体,引号的字形也必须要考虑所在文本块的语言设置才能正确呈现。在Web中,必须显式设置字体才能在对应的语段使用正确的字形。
<span style="font-family:SimSun, 'Times New Roman'">他说:“Hello World”</span>
<span style="font-family:'Times New Roman', SimSun">He said, “你好世界”</span>
他说:“Hello World”
He said, “你好世界”
在Word中,对于支持多语种字体的文本(例如希腊字母、引号等),除了手动设置字体之外,还可以通过设置对应语段的语言来以自动适配字形。只要将选中文本将语言改为英语(美国),之后再通过输入插入希腊字母或引号时就会自动使用西文字体。
顺带一提,Unicode并没有提供全角弯引号。其中收录的" [U+FF02] Fullwidth Quotation Mark “全角引号”和' [U+FF07] Fullwidth Apostrophe “全角撇号”是ASCII字符" [U+0022] Quotation Mark “引号/直双引号”和' [U+0027] Apostrophe “撇号/直单引号”的全角化,后两者是编程语言中的引号符。这四个符号在中英文印刷排版领域均不是规范的标点。
关于横线:minus, hyphen, endash, emdash,连接号和破折号
在中英文印刷排版领域,有几种标点符号以横线的形式呈现,分别是hyphen(连字符)、en dash、em dash、minus(减号)、连接号(短横线)、一字线和破折号。
与之相关的Unicode码元包括:
- ASCII符号
-[U+002D] Hyphen-Minus “短横线” - 通用标点
‐[U+2010] Hyphen “连字符” - 通用标点
–[U+2013] En Dash - 通用标点
—[U+2014] Em Dash “一字线” - 数学算符
−[U+2212] Minus Sign “减号/负号” - 补充标点
⸺[U+2E3A] Two-em dash “破折号”
标点符号和码元之间的对应关系大概是:
- hyphen(连字符):在英文文本中用于连接英文单词。通常使用
-[U+002D] Hyphen-Minus,很少有人使用‐[U+2010] Hyphen。 - en dash:在英文文本中用于表示数字范围或比分。总是使用
–[U+2013] En Dash。 - em dash:在英文文本中用于表示停顿或解释说明。总是使用
—[U+2014] Em Dash。 - minus(减号/负号):表示减法。在语义和视觉效果上应当使用
−[U+2212] Minus Sign,但很多人使用-[U+002D] Hyphen-Minus;在编程语言中总是使用-[U+002D] Hyphen-Minus。 - 短横线:在中文文本中用于连接字母、数字或复合词的部分,通常使用
-[U+002D] Hyphen-Minus “短横线”。 - 一字线:在中文文本中用于表示范围或起止,通常使用
—[U+2014] Em Dash “一字线”。 - 破折号:在中文文本中用于表示停顿或解释说明,通常连用两个
—[U+2014] Em Dash “一字线”,从语义上应当使用⸺[U+2E3A] Two-em dash “破折号”,但是从来没有人会这么用。
这里有一个问题:在中文文本中,表示数字范围应该使用— [U+2014] Em Dash “一字线”,但这种写法在英文文本中是错误的。而在英文文本中表示数字范围的– [U+2013] En Dash并不是《标点符号用法》中规定的中文标点。在混合排版中原则上应当根据语段选择合适的符号。
此外,与引号一样,中文的连接号(短横线)与常用的英文连字符是同一个Unicode码元(- [U+002D] Hyphen-Minus),也需要通过设置字体或语言来进行区分。
关于空格
在网页和印刷排版中,可以使用以下几个Unicode空格码元进行排版控制:
- ASCII符号
[U+0020] Space “空格” - 拉丁标点
[U+00A0] No-Break Space “不间断空格” - 通用标点
[U+2007] Figure Space “数字空格” - 通用标点
[U+200B] Zero Width Space “零宽空格” - CJK标点符号
[U+3000] Ideographic Space “全角空格”
码元对应的语义为:
- [U+0020] Space “空格”:显示一个空格,并允许在该位置断行;最常见的空格。
- [U+00A0] No-Break Space “不间断空格”:显示一个空格,不允许在该位置断行;用于连接不宜在中间断行的内容,比如数值和单位,如
10 kg。 - [U+2007] Figure Space “数字空格”:显示一个与数字等宽的空格,不允许在该位置断行;用于数字间对齐占位和避免换行,可以用于分隔长数字,如
+86 123 3456 6789,但不常用。 - [U+200B] Zero Width Space “零宽空格”:不显示空格,但允许在该位置断行;用于手动截断长单词,或者在不使用空格分隔语素的语言中标记分词。
- [U+3000] Ideographic Space “全角空格”:显示一个与汉字等宽的空格,允许在该位置断行;用于汉字间的对齐占位,如
张 三。
在印刷排版中,通过适当使用不间断空格和零宽空格,可以让排版工具自行寻找更加合适的断行位置,避免不宜断行的文本(如商标名、学名等)被从中断开,或者长文本(如标识符、网址等)占据一行导致前行内容过于稀疏,从而获得更为美观的排版效果。
然而,在数字文档和网页排版中,使用非常规空格可能会带来一定的问题。最常见的问题是非常规空格作为文本流的一部分会在复制时被写入剪贴板,导致用户粘贴时得到形状相似但对应码元不同的内容,从而影响一些对字符码元敏感的操作过程,如代码编写或文本查找。
需要特别注意的是,在网页中,浏览器经常会在处理用户复制事件时将普通文本段中的不间断空格[U+00A0]( )转换为普通空格写入剪贴板,只有纯文本输入控件(<input>和textarea)中的[U+00A0]复制时会保持原样。这个行为有时候会带来一些用户操作和调试上的麻烦。这个行为的原因是HTML渲染时默认会折叠源码中的所有连续空白符(包括空格、制表符和回车)为一个空格,早期的网页开发者为了显示多个连续空格,经常使用渲染时不会被折叠的 来充当连续的空格字符,为了迁就这个用法,浏览器往往将段落中的不间断空格替换为普通空格来避免在其他软件中引入非预期的字符,但也导致普通段落中的 无法被正常复制。

浙公网安备 33010602011771号