关于网页中显示生僻字的方法

问题描述:今天编辑团队在发布一篇文章的时候有一个 人名有(yan)字, 网页默认编码UTF-8 ,字体CSS代码如下:{font-family:-apple-system, Helvetica Neue,\5FAE\8F6F\96C5\9ED1, sans-serif,Tohoma} 。发现在浏览器中显示不出来这个字,后只能强行在这个字前设定CSS字体样式解决<font style="family:SimSun"></font>。

相关问题发现并不那么简单...

知乎上已有相关问题:https://www.zhihu.com/question/20147852

是否可以用 web font 技术来解决冷僻汉字的显示问题?
目前似乎所有的中文字库都没有包括全部的汉字。古籍中的许多冷僻字在网页上无法显示,一些科技领域(例如化学、生物学)也常常会造一些新字,同样无法在 web 上显示。虽然这些字中的许多已经在 Unicode 里,但是没有计算机上字库的支持也是枉然。

那么是否可以用 web font 技术来解决这个问题?以及有人在做这方面的工作吗?
把我的想法总结一下:
不同字体的冷僻字可以先不去考虑,首先是要把冷僻字显示出来,然后才是不同字体的问题。
有两种办法,一是一个冷僻字做一个字体文件,然后在用到该字的时候直接调用该字体文件;二是采用 Google Web Fonts 的办法,只从字体文件中调用所需的汉字即可: http://www.guao.hk/posts/google-web-fonts-api-adds-text-equals-parameter.html
只是我不清楚对于中文来说,是否会有实现上的问题? 

----------------------------

在日本人处发现了这个:http://glyphwiki.org/wiki/GlyphWiki:%E3%81%A9%E3%81%86%E3%82%84%E3%81%A3%E3%81%A6%E4%BD%BF%E3%81%86%E3%81%AE%E3%81%8B

顾轶灵
CSS、前端开发、JavaScript 话题的优秀回答者
5 人赞同了该回答
我觉得这是个可以探讨的话题,考虑了下有一定的可行性。主要需要考虑的有:
不同字体下冷僻汉字的开发
我们总是希望冷僻汉字的字体会与页面内已有字体相符合,所以对于不同的字体,都要额外开发包含冷僻文字的版本,这个可能会比较困难,但并非不可能实现,只是代价值得商榷。
字体文件的体积问题
用 @font-face 嵌入字体的话,字体的体积对用户的体验有着极大的影响。如果字体内嵌入全部中文字符,显然公认不可行。所以是否可以开发仅包含冷僻汉字的字体,再通过 CSS 的 font-family 在遇到常用字时 fallback 到后续的 Web 安全字体。如果你需要显示的冷僻汉字不多,比如几十个,那么体积应该是可以接受的。更进一步,可以考虑通过对具体页面的内容,由服务器自动组合生成仅包含每个特定页面内的冷僻汉字的文件,可以进一步缩减冷僻文字字体的大小。对于相对固定的内容,利用缓存可以较好地解决性能问题。
抛砖引玉,考虑得可能不太周全,请大家补充。

梁海
字体、英语、CSS 等 6 个话题的优秀回答者
2 人赞同了该回答
这是个很好的想法。
而且似乎很适合文泉驿社区基于 Droid Sans Fallback 来制作。
具体是「一个汉字一个字体文件」还是怎么打包,要减少下载的数据量还是减少 HTTP 请求,这个有多种灵活的技术可以解决,不是什么障碍。

主要会遇到的问题都在 Windows 上:
如果没有专门为 Windows 做 hinting,那么 web font 在正文字号下的显示效果会很差。但确实这个方法本来也就不应该苛求太高的质量,所以倒也没什么。(同样,为不同的字体风格去制作不同的生僻字 web font 也没什么必要。)
IE 的字体 fallback 行为很奇怪,把常规中文字体和生僻字的这个 web font 共同写在 font-family 列表里的时候可能无法(像 CSS 规范所期待的那样)正常 fallback。具体可以和熟悉 IE 的前端工程师探讨。
编辑于 2012-04-03

齐凡
专注网页字体应用
2 人赞同了该回答
这个想法是很可行的,我做过测试了。把一个页面上所有的生僻字做成一个web font字体,然后整篇文章设置成这个字体,这样生僻字自动就会应用web font字体,其他字自动应用安全字体。不能单个字拆分,那样http请求过多,影响速度且生僻字重用性不高,你可以把做成的包含需要的生僻字的字体上传到 http://www.youziku.com/ 上,然后生成web font,引用到页面就可以了,你可以试一下。
另外,生僻字以系统更新的方式更新到各个系统中,这是不可能的,微软到现在还没有把IE6清除干净,系统都是他的也没办法。
编辑于 2013-10-25

RhinoYang
行业分析师(TMT),IT/金融从业者
几个问题和想法:
1. 中文字体体积大:对于html的字体一般是font: "MyNewFont", "Microsoft YaHei", Arial;这种格式,如果找不到"MyNewFont"字体,就会尝试用微软雅黑,最后尝试Arial,最最后用相近的客户端系统中有的字体。所以如果MyNewFont里只有几百个生僻字,那么体积应该不大。(上面是为了方便举的例子,很多时候会把适合英文的字体写在前面吧)。
2. 选择哪个字体渲染:按照上面的例子,对于普通字,web font有能发现MyNewFont字体,那么就会用MyNewFont去渲染,但是字库里又没有普通字的部分,是不是就会跳过微软雅黑的尝试,直接去找相近的系统字体来实现?这部分不是很清楚浏览器都是如何实现的。所以,要用这个方案解决生僻字,需要浏览器对字体规则的优化支持。
3. 生僻字制作:可以按照分类来,比如姓名类的(比如在公安局网页)、化学类的(新元素的新造字)、网络用语的(映入脑海的是提手旁右边一个上字一个下字的……),由相关组织去负责,这个就不是技术问题了。
所以,我觉得这个是一个可能的解决方案。
不过,说到底,既然生僻字都制作好了,干嘛不加入到已有的某个字体里去,然后预装到各个系统去,以系统更新的方式更新就行了。方正这种专门搞字体的肯定会有人力做这个的嘛。
编辑于 2012-03-29

shizhao
一切尽在八卦中
可以拆开啊,一个汉字一个字体文件,或者像google的web font那样,在用的时候只引用需要的那几个字

还有人专门写了论文:https://wenku.baidu.com/view/12f90c22a5e9856a561260ce.html###

PDF论文:网页中即时动态显示和输入冷僻字的方法



猜你喜欢

转载自blog.csdn.net/budapest/article/details/80811505