| adm | Find | login register |
guest |
大家好, 我在 Ubuntu 10.04 的 Firefox 4 以上版本發現一個字型顯示的問題。如下的 css 字型設定: font-family: Arial, cwTeXHeiBold, sans-serif; 以往 Firefox 3.* 時,會以 Arial 顯示英數字,再用 cwTeX粗黑顯示中文。然而 Firefox 4.0 以後,無法 fallback 到 cwTeX,而直接以系統預設 sans-serif 顯示中文。 根據我的測試,這個問題只發生在 中文版 Ubuntu / Linux Mint,切換系統語系為英文時,就又一切正常。Windows 也是正常的。 不知道問題會不會出在 Ubuntu 的中文語系字型設定。我記得版上有一些朋友(如 coolcd)是用其他的 Linux Distro,能否幫忙一起測試。我已經在 bugzilla 陳報此問題: https://bugzilla.mozilla.org/show_bug.cgi?id=678561 裡面有兩個 testcase 可以直接測試。 謝謝大家。
Hemiola | |||||||||
coolcd joined: 2008-01-21 posted: 2601 promoted: 348 bookmarked: 95 |
這可能牽涉到 firefox 與 fontconfig 的設定 Linux fontconfig 裡的 Helvetica、Arial 似乎會綁到其他字型上 你可以用命令測一下 $ fc-match --sort Helvetica fontconfig 會依序取用字型 如備取的字型清單中有中文字型 不知是否 firefox 搞錯的原因? 我這邊測試結果是 Helvetica 似乎會用 DroidSans + DroidSansFallback 來顯示 測試環境是 Firefox 5 on Archlinux edited: 2
| |||||||||
guest |
謝謝 coolcd。 我的第一個 testcase 不太好(不小心用了 Helvetica),所以才做了第二個 testcase。 以第二個 case 來說,我的 fc-match --sort 'DejaVu serif' 輸出是 DejaVuSerif.ttf: "DejaVu Serif" "Book" 所以對於 font-family: DejaVu Serif, FreeSerif, serif; 缺的越文字的確就是用 AR PL UMing TW 來顯示的,而不是 FreeSerif。 這麼說來,Firefox 4.0 是不是聰明過了頭?? | |||||||||
coolcd joined: 2008-01-21 posted: 2601 promoted: 348 bookmarked: 95 |
在 archlinux 的論壇有人反映了類似的問題,討論串中提到了bug 553580,看來應該算嚴重的 bug → 因為等於是 CSS 的 font fallback 機制被打壞了。 也許把 .testX 的 font-family 設為 XXXXXX,FreeSerif,Sans 比較能顯示出問題?XXXXXX 必需是不存在的字型名稱,理論上 firefox 應該 fallback 使用 FreeSerif,但目前似乎是 firefox 4 以後的版本會用 XXXXXX,然後從 font-config 去找替代字型。 另外,查到 bug 546315,據說在 firefox 5.0 修復,但現在看來似乎沒有修好。 edited: 2
| |||||||||
guest |
553580 還沒仔細研究,不過 546315 看來是真的還沒修好。我用中文 ubuntu,最後一行是以 sans-serif 顯示,也就是跳過了 Georgia;但是在英文 ubuntu 裡就是正常的。 coolcd,能麻煩你貼 546315 及 678561 的 screenshot 嗎?你是否是用 debian? | |||||||||
coolcd joined: 2008-01-21 posted: 2601 promoted: 348 bookmarked: 95 |
有用 debian 與 arch,先測 debian squeeze (stable) 目前 debian 的 firefox 是 iceweasel 3.5.16 相關的 fc-match 結果請看附檔 | |||||||||
guest |
謝謝 coolcd。你接下來用 arch 測時,能不能麻煩你裝 msttcorefonts,並用 fx 5 以上測試。 | |||||||||
guest |
coolcd, 我花了點時間做了一些測試,整理了一個表格: http://hemiolapei.free.fr/temp/fallback/fallback-test.html 現在希望能再多一兩筆非 debian 的系統,也許能更清楚問題再哪。另外也請你對這個表格給我一點意見,我想要貼到 bugzilla 上,希望能讓開發者重視。
謝謝你。 hemiola | |||||||||
coolcd joined: 2008-01-21 posted: 2601 promoted: 348 bookmarked: 95 |
先附上 Fx6 (英文介面) 在 archlinux 的測試結果 $locale LANG=en_US.UTF-8
| |||||||||
guest |
coolcd,謝謝你。 你有裝 msttcorefonts 嗎?沒裝的話對 Bug 546315 的測試可能有影響,看不出到底正不正確。 | |||||||||
coolcd joined: 2008-01-21 posted: 2601 promoted: 348 bookmarked: 95 |
| |||||||||
guest |
原來如此,我還在納悶為何有 georgia 沒有 courier。 你的測試推翻了我原先的推測。我以為中文字型出不來是和 ubuntu 的 /etc/fonts/conf.d/69-language-selector-*.conf 有關(還是你之前加入該設定的影響? http://hyperrate.com/thread.php?tid=22156 ),我也以為在英文系統下可以正常顯示 georgia,結果看來都不一定。 | |||||||||
coolcd joined: 2008-01-21 posted: 2601 promoted: 348 bookmarked: 95 |
其實我愈測愈頭昏…… 我有 courier,但在 29-replace-bitmap-fonts.conf 中被取代成 Courier New(無安裝) ,Liberation Sans(有安裝),monospace 令我意外的是,竟然用 WenQuanYi Zen Hei Mono 來顯示 還有,要特別說明一下,我雖用 en_US,但我的 local.conf 有加入 sans, serif, monospace prepend binding=same 的設定 但令我意外的是,sans-serif 明明 prepend 了不少系統中確實存在的中、英文字型,但 font-config 就是會選用 Droid Sans 還有一個疑問是,當指定字型不存在時,fontconfig 到底如何決定 font family? 我這邊會用 WenQuanYi Zen Hei Mono 讓我蠻訝異的 | |||||||||
guest |
有些過於專業的我也不懂,你的測試結果也的確讓人感到好奇。不過這樣也好,正可以說明這個 bug 影響的層面很廣。 | |||||||||
coolcd joined: 2008-01-21 posted: 2601 promoted: 348 bookmarked: 95 |
其實我對這個問題是 firefox 的錯、fontconfig 的錯,還是 fontconfig 設定的問題,還有蠻大的疑問 | |||||||||
guest |
的確有理。不過既然 chromium 和舊版 firefox 都可以正常顯示的話,我傾向認為是 firefox 的錯。 我已經把測試結果和初步結論貼上去了,你如果方便也可以關心一下。 https://bugzilla.mozilla.org/show_bug.cgi?id=678561 | |||||||||
coolcd joined: 2008-01-21 posted: 2601 promoted: 348 bookmarked: 95 |
再測過後,我認為與 LANG、fontconfig font family prepend binding 應該無關 當然,這些設定可能有影響,但並非關鍵 因為我把我 local.conf 中所有 prepend 都 comment 掉後 再測 bug 678561 結果如下 目前我的系統中,helvetica 根據 29-replace-bitmap-fonts.conf 會被替代成 Arial, Liberation Sans, sans-serif 而 Arial 又會被不知道哪裡的設定替代成 Liberation Sans, AR PL New Sung 等 $ fc-match --sort arial|head $ fc-match --sort helvetica|head $ fc-match --sort sans-serif|head 我之所以無法判定是 firefox 的錯或 fontconfig 的錯,是因為,正常的 helvetica 字型,應該沒有中文字,所以 fallback 到第二個字型是很自然的。但在 Linux 中的 helvetica,是模擬的,如果 fontconfig 告訴 firefox,系統的 helvetica = AR PL New Sung + Liberation Sans + DejaVu Sans + Helvetica + ... ,那麼,會有這種情況發生,是不是很自然?以前的 firefox 與 chrome 沒這種現象,則有可能是對 fontconfig 支援不足所致。不管如何,以上只是我依測試結果與個人經驗推想,有可能是錯的,或者被進一步的測試推翻。 | |||||||||
guest |
你的推測是有道理的。
不過我當初做這個 testcase 時沒有想好,用了一個 linux 不存在的字型。如果你把 helvetica 換成其他現有的字型比方 dejavu sans,你會發現 test 2 的中文字型還是錯誤。所以到頭來 firefox 還是有問題。
| |||||||||
coolcd joined: 2008-01-21 posted: 2601 promoted: 348 bookmarked: 95 |
目前覺得是 firefox 對於 CSS 指定的字型、fontconfig 中該字型的替代字型、CSS 中指定的替代字型的優先順序判斷有問題。 看到 Karl Tomlinson 在 bug678561 的回應了,希望有解決。 edited: 1
| |||||||||
guest |
Good! 不知道在此接著討論是否合適。coolcd 想請教你,你知道非 ubuntu 環境中(或是說 ubuntu 砍掉 69-language-selector-zh-*.conf),哪個檔在決定中文字型的顯示順序嗎?是否是 65-nonlatin.conf? | |||||||||
coolcd joined: 2008-01-21 posted: 2601 promoted: 348 bookmarked: 95 |
另開了一個主題 fontconfig 字型順序的設定 來討論 |
| adm | Find | login register |