我有一個帶有英文和日文文本混合的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