我有一个带有英文和日文文本混合的XHTML1.1文档,字符集指示符为lang =“jp”和xml:lang =“jp”在html元素的开始标记中。实际内容编码UTF-8,这是在内容类型声明,以及:如何让浏览器加载日文字体而不是中文字体
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="jp" lang="jp">
<head>
<title>Test page</title>
<meta http-equiv="Content-Type"
content="application/xhtml+xml; charset=utf-8"/>
</head>
<body><div>今</div><div>込</div></body></html>
的XML/HTML规范说的“lang”属性是继承的,所以内容应该结束了使用支持日语的字体进行渲染,但是我看到它使用的是专为中文而不是日文的字体(日文“汉字”在两种语言之间的许多情况下实际上有微妙的差异,而且对于一些常见的字符)。
例如,在上面的代码中,第一个字符的顶部应该带有 - 在它下面。如果使用中文字体,那么这个字符总是会看起来像是在下面。另外,第二个字符的形状应该看起来像7 \,但是当使用中文字体时,它更像是一个lambda,λ。这些都不是正确的日语打印/屏幕形式。
问题:有没有一种方法可以强制浏览器为CJK文本选择日文字体,而无需编写一个只包含一百个和一个字体名称的CSS规则,希望它们中的至少一个能够匹配用户所拥有的安装? (由于最小的CJK字体沿着> 4MB的行,而完整的字体大约在15〜20MB之间,依靠@ font-face声明来确保正确的字体被加载显然是不可能的)。
答案评论
虞姬:现代浏览器目前所有版本。如果答案是平台和浏览器依赖的,那真的很简单;为了它能够在任何地方工作,显然我需要所有这些=)
deceze:可悲的是,浏览器不会说他们最终使用哪种字体,如果没有显式的CSS规则来告诉他们哪种字体从中挑选。当使用getComputedStyle(document.getElementById("elementid")).getPropertyValue("font-family")
查询计算出的样式时,Chrome会报告它使用的是“Times New Roman”,事实并非如此,因为该字体中没有CJK字形。 Firefox是甚用处不大,报告说,它正在使用的字体“衬线”,这是不是一种字体,但通用的类别标签...
2015年编辑
四年过去了,这个问题是仍然得到意见,所以有两件事值得注意:
- XHTML1.1已经在2011年出现了,它现在已经是一种死的技术。 XML是一种中间格式,如果需要将内容放到Web上,唯一正确的方法是将内容XSLT转换为真正的HTML(当然,如果您使用XML,则您已经知道XML不是演示文稿格式,并且您已经拥有XSLT工作表,可将符合DTD的数据转换为纯文本,HTML,PDF等)
- Webfont托管服务support subsetting,以便网站可以使用仅包含字符轮廓和组合规则的字体在页面上使用。
什么字体被用来渲染文本?尝试使用Firebug或Webkit Inspector,导航到该元素并查看其属性以查找。 – deceze
哪些浏览器是你的目标?这些事情不幸的是浏览器和平台的依赖,所以你想在你的问题中指定。 – Yuji