我找到了一些答案与各位分享:
Windows 中 Font Fallback 和 Font Linking 有两种机制匹配字体,通常情况下:Font Fallback 是在应用程序中完成(比如浏览器);Font Linking 是在操作系统的 GDI 中完成 。
当并列存在浏览器的 Font Fallback 和 操作系统的 Font Linking 的时候, Font Linking 会覆盖掉 Font Fallback 的结果,也就是最终生效的是 Font Linking 。
下面结合实例分别阐述两种机制的处理过程:Font Fallback
为每种语言提供默认字体
比如Notepad上要显示一段文本,包括了英语、希伯来语和Telugu语,用户选用Tahoma来显示它。Tahoma是Opentype字体,支持英语和希伯来语的显示,但不支持Telugu语,所以当解析到Telugu字符时,Uniscribe发现Tahoma无法显示字符,便使用Telugu的默认字体Gautami来显示它。这些默认的字体,用户无法增加或修改。整个过程对用户来讲是透明的,不需要用户去关心其中。 Font Linking
Font Linking 技术能够使用一种甚至多种字体(linked font)链接到另外一种字体(base font)。你如果使用 Base Font 去显示某一段多语言的文本,对于不支持 Base Font 的文字,系统能够自动使用 Linked Font 代替。
这个关系可以到注册表中看到( 在 HKEY_LOCAL_MACHINE–\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink )
所以我们看看 SimSun-ExtB 对应的情况是:
micross.ttf 是对应的字体文件名,后面的 108,122 则代表字体名称。当 IE9 默认设置 SimSun-ExtB 这个字体时,结合 @厉向晨 的答案,我们发现 SimSun-ExtB 中包含的是生僻字,测试例子中是常用字,所以系统会继续 Font linking 到 micross.ttf 这个字体上,那么最终实际显示出来的也就是这个字体了。Font Substitution
将一种字体的请求转化到另一种字体的机制。参见注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes
这里我们就可以解释如果 Windows 安装了 Helvetica 字体为什么显示为 arial 字体了
小结
GBK 编码的 html 文档 在 IE9 中 如果 字体定义为: font-family:tahoma, sans-serif; 则会 显示为 micross 字体;UTF-8 编码 不会有这个问题。终于找到这个字体是神马了!是 Adobe 黑体 Std,具体原因目前大致了解了,有待测试证实。IE9 标准模式下IE9 标准模式下font-family: sans-serif; 显示为 adobe 黑体
font-family: serif; 显示为 adobe 仿宋
前提是安装了以上两个字体,photoshop 一般会自带这两个字体。