2011-06-27 76 views
1

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

四年過去了,這個問題是仍然得到意見,所以有兩件事值得注意:

  1. XHTML1.1已經在2011年出現了,它現在已經是一種死的技術。 XML是一種中間格式,如果需要將內容放到Web上,唯一正確的方法是將內容XSLT轉換爲真正的HTML(當然,如果您使用XML,則您已經知道XML不是演示文稿格式,並且您已經擁有XSLT工作表,可將符合DTD的數據轉換爲純文本,HTML,PDF等)
  2. Webfont託管服務support subsetting,以便網站可以使用僅包含字符輪廓和組合規則的字體在頁面上使用。
+0

什麼字體被用來渲染文本?嘗試使用Firebug或Webkit Inspector,導航到該元素並查看其屬性以查找。 – deceze

+0

哪些瀏覽器是你的目標?這些事情不幸的是瀏覽器和平臺的依賴,所以你想在你的問題中指定。 – Yuji

回答

0

那麼,如果一切都失敗了,我會明確指定CSS中的常用日語字體。在哪些平臺上查找哪些字體可用,並創建字體堆棧。

基本上,只需選擇字體的老式的方式,看看是否能解決問題。

+0

你意識到你已經回答了一個問題:「我怎樣才能做A而不做B」,「至少你可以做B」,對吧? =)CSS解決方案就是我目前使用的解決方案,因爲它是唯一的可用解決方案,同時也爲此問題找到了實際的解決方案。 –

+0

你已經這樣做了,在這個問題上不是很清楚。選擇日文字體的唯一可靠方法是使用Shift-JIS內容類型,我相信你不需要這樣做。 – timw4mail

+0

的確,我們從單/雙8位代碼頁開始,並且現在沒有人應該建議我們使用UTF8 unicode。希望有人能夠確定地回答,通過「xml:lang」/「lang」的字符集指令是不是被瀏覽器所尊重,或者這個屬性的XML/HTML規範實際上是否比其他東西更有用必須得到尊重。 –