为什么在有些软件环境下中文里的中圆点(间隔号)是半角的?

关注者
80
被浏览
13500

5 个回答

@钱争予 和 @Chen Yijun 说得都没错。再补充一些:

首先一定要搞清楚我们说「中圆点」、「间隔号」时到底说的是什么字符,很多问题其实出在字符上:
  • 大陆这边的标准是「·」(U+00B7 MIDDLE DOT),这是一个不常用但也不算罕见的西文标点符号的字符(有时能看到拉丁语格言用它来分词)。简体中文字体把它借来用了,并且做成一个汉字的宽度。简体中文输入法也全都输出这个字符。繁体中文字体通常不把它做成一字宽。
  • 许多港台用于拿「.」(U+FF0E FULLWIDTH FULL STOP)当间隔号用。这是语义不合适的 hacking。U+FF0E 是 ASCII 字符「.」(U+002E FULL STOP,即我们日常使用的西文句点)对应的全角字符,本来应该用作中文科技文献的句点。而港台以标点在字框内居中为准,于是一个全字宽的西文句点就成了在字框内居中的圆点,于是就被拿来当间隔号用了。
  • Windows 里的港台字体常常还把西文标点「‧」(U+2027 HYPHENATION POINT)当间隔号用。但这个做法不太通用,至少 Mac OS X 里的港台字体不支持。U+2027 本来是字典里分音节用的点,从语义上也不应该用作中文的间隔号。
  • 日文字体都支持「・」(U+30FB KATAKANA MIDDLE DOT),它是日文里用片假名转写外文人名时用的间隔号。我个人其实最希望中文世界能推广使用它……但至今很多中文字体都不支持它,必须依赖系统 fallback 到日文字体才能显示出来。
  • 当然,还有人直接偷懒用西文句点「.」(U+002E FULL STOP)甚至连字符「-」(U+002D HYPHEN-MINUS)来替代专门的间隔号字符。

港台常用的 FULLWIDTH FULL STOP 和 HYPHENATION POINT 在不同字体中的样式差别极大(比如前者在大陆字体里位于一字空白的左下角,在港台字体里常位于正中),遇到不同的字体时就很容易出兼容问题。
大陆通用的 MIDDLE DOT 在中西文字体里都是居中的,区别主要在于空格的宽度。

所谓「全/半角」(或港台术语「全/半形」)是用来区分字符(character)的,但具体某个字符显示成什么样的字形(glyph)主要是由字体(font)控制的。
人们常常说「全角间隔号」、「全角弯引号」,这不恰当,而且很误导。「·」(U+00B7 MIDDLE DOT)和「“ ‘ ’ ”」都不存在全角版本,只不过有的字体中把它们做成和汉字一样宽的。
所以也不存在「U+00B7 是半角的」这种问题。事实上只是它有时因中文字体而显示为一字宽,有时因西文字体而显示为大概半字宽。

注意:
微软雅黑等微软 ClearType 新字体都不再把 U+00B7 做成一字宽了,不知是为了和西文字体兼容还是什么。另外听说 GB/T 15834-2011 里好像对间隔号的样式也有调整,我还没查证。

参考图,展现 U+00B7 MIDDLE DOT、U+2027 HYPHENATION POINT、U+FF0E FULLWIDTH FULL STOP 和 U+30FB KATAKANA MIDDLE DOT 受操作系统主要介面字体的支持情况:
d.pr/i/T3is
有些標點在Unicode中並未分成半、全形二個字符,間隔號和大陸標準的彎引號都與西文標點共用(有些西文字體還包含中文篇名號)。如果設計師或系統、瀏覽器採用「西文字體在前、中文字體在後」的fallback順序,就會導致這幾種標點變成半形的樣子。

在CSS3中,可以用@font-family的「unicode-range」屬性搭配中文字體來解決這個問題。最近版本的Webkit和IE8都已經支援。