为什么在知乎显示的前引号和后引号不是「全角」?

论坛 期权论坛 期权     
匿名用户1024   2021-5-29 11:52   11603   3
分享到 :
0 人收藏

3 个回复

倒序浏览
2#
有关回应  16级独孤 | 2021-5-29 11:52:15
从来就没有全角的弯引号。
全角或半角是字符概念,全字宽或半字宽是 glyph 外观概念。

西文弯引号和简体中文弯引号使用的是同一组字符:“…‘…’…”
这一组字符具体是显示成西文那样的引号,还是显示成为中文优化过的占一个汉字宽度的引号,完全取决于字体。
高质量的网页设计中,大多会让西文字体优先,然后中文字体后备。社区就是这样的。而浏览器在显示每一个字符时都会依据字体的优先级。于是引号等标点与阿拉伯数字、拉丁字母一起,由优先的西文字体显示;因为汉字在西文字体中不存在,所以由后备的中文字体显示。

@zonovo 提到的 “…‘…’…” 和 "…'…'…" 的区别与全角还是半角没一点关系。
"…'…'…" 是打字机时代为了节省键位而引入的「直引号」,至今都在不苛求细节的环境下使用,操作系统默认输出的引号也是这样。但中文环境下,因为输入法往往能自动协助用户输出 “…‘…’…”,所以 "…'…'…" 很少用到。
事实上,尽管弯引号  “…‘…’…” 没有自己对应的全角字符,直引号 "…'…'…"  却可以说是有的。半角字符「"」的默认身份是直双引号,对应全角字符「"」;而半角字符「'」的默认身份是直撇号,对应全角字符「'」。
3#
有关回应  16级独孤 | 2021-5-29 11:52:16
好像没多少人关心中文字体的细节。不过我强迫症发作,就写了一个客户端(Chrome/Firefox)用户脚本(需要Tampermonkey/Greasemonkey),也可以用来(部分)解决这个问题。
项目主页:
GitHub - stecue/fixcjk: Fix CJK fonts/punctuations for Chrome and Firefox (Windows AND Linux!)
OpenUserJS:
https://openuserjs.org/scripts/stecuegmail.com/FixCJK!
Greasy Fork:
https://greasyfork.org/en/scripts/19812-fixcjk
之前从来没写过 JavaScript,目前将就能用。还请大家多赐教!
4#
有关回应  16级独孤 | 2021-5-29 11:52:17
我觉得@梁海 所说的“从来就没有全角的弯引号”是不对的。

目前的问题,是在UNICODE编码中,中文双引号与西文双引号共用了编码造成的。
编码的问题和字形库(或称字体)中某个字符是全角还是半角无关。
现在普遍使用的字形库中,每个字都有自己的宽度属性。某种程度上讲全角半角是个点阵时代的旧概念。
近似字符共用编码是UNICODE的一大缺点,造成了很多不必要的麻烦。

全/半角这个概念,主要是对中日韩(CJK)这三国的方块文字有效。
编码只是编码,是一个数字,并不是一个字形的定义。
所以,双引号的UNICODE编码对应的字形,既可能是全角,也可能是半角。
在一些针对国人开发的字形库中,双引号为全角。

但是由于这些字形库中的英文字符,设计得过丑。
所以很多网站采用多套字形库。英文字母用英文字形库。

目前通用的实现是:先匹配英文字形库,没有的再匹配到中文字形库。
因为英文字形库一般都有双引号的字符,所以英文的双引号被优先匹配。
而这些英文字形库中的双引号字形,是半角而非全角。

如果要解决这个问题,最好的方式是在UNICODE中增加专门的中文双引号。
但这么做,一个需要时间(包括制定修订版编码,和推广新字符),一个还要考虑到历史资料中大量使用西文双引号的情况。

不然的话,要么接受这样一个不协调的双引号,要么通过hack手法,把双引号都指定给全角的中文字形库来渲染。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:136515
帖子:27303
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP