CSS 怎麼處理生僻漢字?
例如:,上龍,下天,音:yan,第三聲。知乎默認的字體就無法顯示該字。該如何定義字體以處理生僻字呢?
我看了一下知乎的字體定義:font: 13px/1.5 "Helvetica Neue",Helvetica,Arial,Sans-serif無法處理我舉例的這個中文字,去掉該樣式定義,使用瀏覽器默認設置即可正常顯示。
- 生僻字能否顯示,和 CSS 沒有直接關係。CSS 只負責建議瀏覽器用什麼字體來顯示,瀏覽器自己嘗試調用恰當的 API 和恰當的字體來顯示這個字元。
- 問題補充說明中給出的那個字元, U+E863,它位於 Unicode PUA(Private Use Area)。一個 PUA 字元到底用來幹什麼,這不受 Unicode 標準的控制,只遵循「private use」。所以,原則上任何平台沒有義務正常顯示這個字元。@濤吳 和 @江疆 草率給出的解決方案,呃,不太合適吧……
- @DimLau 在問題評論中提到了 龑 U+9F91 [2] 和 ? U+4DAE [3],這兩個字元都比較正常。U+9F91 和所有常用漢字的身份一樣(都位於 CJK Unified Ideographs 這個 block);而 U+4DAE 特殊一些,位於 CJK Unified Ideographs Extension A(這個 block 包含了較為常用的生僻字)。不過這兩個字元都是 Unicode 標準已接納的漢字。
- 問題中說,U+E863 這個 PUA 字元有時能顯示,有時不能顯示,我測試了一下 Windows 和 Mac OS X 兩大平台里常用或較為典型的字體(測試的三個字元依次為: U+E863、龑 U+9F91、? U+4DAE):見文末圖片 [4]、[5]。很明顯,儘管 U+E863 這個 PUA 字元也受一些字體的支持,但 U+4DAE 是更恰當的碼位(PUA 字元在不同字體中的樣子很可能不一樣:[1])。U+4DAE 受 Windows 的中易宋體(SimSun)、微軟雅黑,以及 Mac OS X 的華文黑體、冬青黑體簡體中文支持。醜陋的 Arial Unicode MS 既不支持 PUA 字元 U+E863 也不支持 U+4DAE。
- 所以,知乎的 CSS 里 font-family 的設定可能影響了瀏覽器選擇的 fallback 字體。IE 等 Windows 瀏覽器下面的字體 fallback 情況比較亂,這個我就說不清楚了。
這種問題不適合 web font 解決,因為首先是字元不當。至於為什麼有些字體要用 U+E863 這個 PUA 碼位,這個可能得 @厲向晨 來解答。(似乎和 GB 18030 有關?)
- 我的建議就是:盡量用 龑 U+9F91。因為這個字似乎並沒有進入簡化字表。如果一定要用簡化的版本,那麼用通用的 ? U+4DAE。只要用這兩個字元,那麼在任何時候都能正常顯示。希望這條答案能在一年半後圓滿解答 @黃瑋 的疑惑……
[3] ? U+4DAE http://codepoints.net/U+4DAE http://www.zdic.net/zd/zi2/ZdicE4ZdicB6ZdicAE.htm
[4] Windows:[5] Mac OS X:比較生僻的漢字通常只有 Arial Unicode MS[1] 這個字體支持。這其實並不是 CSS 可以「解決」的事情,只能「繞開」。我手頭沒有這個字體,無法驗證,不過我猜想將
改為font: 13px/1.5 "Helvetica Neue",Helvetica,Arial,Sans-serif
font: 13px/1.5 "Helvetica Neue",Helvetica,"Arial Unicode MS",Sans-serif
即可。
更新:
本版同文說 CSS3 直接調用外部字體理論上可行但是目前並不現實,因為中文字元量大,比如 Arial Unicode MS 有 22M 之巨。「部分傳輸」這一功能雖然有部分廠商嘗試實現,但是效果欠佳[2]。此外冷僻字在這些外部字體中有對應字元的可能性也不高。
再更新:Hiragino Sans GB 就支持這個字元。如果希望保持原來的其他字體設置,可以用類似 font: normal normal normal 13px/1.5 "Helvetica Neue", Helvetica, Arial, STXihei, "Hiragino Sans GB", sans-serif; 這樣的寫法。
鳴謝 @江疆
[1] http://en.wikipedia.org/wiki/Arial_Unicode_MS[2] http://www.typeisbeautiful.com/2010/05/2363推薦閱讀:
※有哪些較好的中文標題字體推薦?
※為什麼現在的安卓其他字體普遍無法正常顯示拉丁增補字元、俄文和繁體字?
※在網站中使用微軟雅黑會不會構成侵權?
※常用的紙書、雜誌正文字體有哪些?有什麼值得推薦的字體?
※毛新宇的字寫得怎麼樣?
TAG:字體 | CSS | Unicode統一碼 |