cht電腦資訊字型
adm Find login register

請幫忙測試 Linux 下 Firefox 字型

guest
1 請幫忙測試 Linux 下 Firefox 字型
Promote 0 Bookmark 02011-08-15quote  

大家好,

我在 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
2
Promote 0 Bookmark 02011-08-15quote  

這可能牽涉到 firefox 與 fontconfig 的設定

Linux fontconfig 裡的 Helvetica、Arial 似乎會綁到其他字型上

你可以用命令測一下

$ fc-match --sort Helvetica

fontconfig 會依序取用字型

如備取的字型清單中有中文字型

不知是否 firefox 搞錯的原因?

我這邊測試結果是 Helvetica 似乎會用 DroidSans + DroidSansFallback 來顯示

測試環境是 Firefox 5 on Archlinux

edited: 2
guest
3
Promote 0 Bookmark 02011-08-15quote  

謝謝 coolcd。

我的第一個 testcase 不太好(不小心用了 Helvetica),所以才做了第二個 testcase。

以第二個 case 來說,我的 fc-match --sort 'DejaVu serif' 輸出是

DejaVuSerif.ttf: "DejaVu Serif" "Book"
DejaVuSerif-Bold.ttf: "DejaVu Serif" "Bold"
DejaVuSerif-Italic.ttf: "DejaVu Serif" "Italic"
DejaVuSerif-BoldItalic.ttf: "DejaVu Serif" "Bold Italic"
uming.ttc: "AR PL UMing TW" "Light"
uming.ttc: "AR PL UMing HK" "Light"
(後略)

所以對於 font-family: DejaVu Serif, FreeSerif, serif; 缺的越文字的確就是用 AR PL UMing TW 來顯示的,而不是 FreeSerif。

這麼說來,Firefox 4.0 是不是聰明過了頭??

coolcd
4
Promote 0 Bookmark 02011-08-17quote  

在 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
5
Promote 0 Bookmark 02011-08-19quote  

coolcd

在 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 修復,但現在看來似乎沒有修好。

553580 還沒仔細研究,不過 546315 看來是真的還沒修好。我用中文 ubuntu,最後一行是以 sans-serif 顯示,也就是跳過了 Georgia;但是在英文 ubuntu 裡就是正常的。

coolcd,能麻煩你貼 546315 及  678561 的 screenshot 嗎?你是否是用 debian?

coolcd
6
Promote 0 Bookmark 02011-08-20quote  

guest
coolcd,能麻煩你貼 546315 及  678561 的 screenshot 嗎?你是否是用 debian?

有用 debian 與 arch,先測 debian squeeze (stable)

目前 debian 的 firefox 是 iceweasel 3.5.16

相關的 fc-match 結果請看附檔

edited: 2
guest
7
Promote 0 Bookmark 02011-08-21quote  

謝謝 coolcd。你接下來用 arch 測時,能不能麻煩你裝 msttcorefonts,並用 fx 5 以上測試。

guest
8
Promote 0 Bookmark 02011-08-22quote  

coolcd,

我花了點時間做了一些測試,整理了一個表格:

http://hemiolapei.free.fr/temp/fallback/fallback-test.html

現在希望能再多一兩筆非 debian 的系統,也許能更清楚問題再哪。另外也請你對這個表格給我一點意見,我想要貼到 bugzilla 上,希望能讓開發者重視。

 

謝謝你。

hemiola

coolcd
9
Promote 0 Bookmark 02011-08-22quote  

先附上 Fx6 (英文介面) 在 archlinux 的測試結果

$locale

LANG=en_US.UTF-8
LC_CTYPE=zh_TW.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES=en_US.UTF-8
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

 

edited: 2
guest
10
Promote 0 Bookmark 02011-08-22quote  

coolcd,謝謝你。

你有裝 msttcorefonts 嗎?沒裝的話對 Bug 546315 的測試可能有影響,看不出到底正不正確。

coolcd
11
Promote 0 Bookmark 02011-08-22quote  

guest

你有裝 msttcorefonts 嗎?沒裝的話對 Bug 546315 的測試可能有影響,看不出到底正不正確。

我有手動裝 Georgia,請看 fc-match-bug546315.txt 的最後一個命令

guest
12
Promote 0 Bookmark 02011-08-23quote  

coolcd

我有手動裝 Georgia,請看 fc-match-bug546315.txt 的最後一個命令

 

原來如此,我還在納悶為何有 georgia 沒有 courier。

你的測試推翻了我原先的推測。我以為中文字型出不來是和 ubuntu 的 /etc/fonts/conf.d/69-language-selector-*.conf 有關(還是你之前加入該設定的影響? http://hyperrate.com/thread.php?tid=22156 ),我也以為在英文系統下可以正常顯示 georgia,結果看來都不一定。

coolcd
13
Promote 0 Bookmark 02011-08-23quote  

guest
原來如此,我還在納悶為何有 georgia 沒有 courier。

你的測試推翻了我原先的推測。我以為中文字型出不來是和 ubuntu 的 /etc/fonts/conf.d/69-language-selector-*.conf 有關(還是你之前加入該設定的影響? http://hyperrate.com/thread.php?tid=22156 ),我也以為在英文系統下可以正常顯示 georgia,結果看來都不一定。

其實我愈測愈頭昏……

我有 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
14
Promote 0 Bookmark 02011-08-23quote  

coolcd

其實我愈測愈頭昏……

我有 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 讓我蠻訝異的

有些過於專業的我也不懂,你的測試結果也的確讓人感到好奇。不過這樣也好,正可以說明這個 bug 影響的層面很廣。

coolcd
15
Promote 0 Bookmark 02011-08-24quote  

guest
有些過於專業的我也不懂,你的測試結果也的確讓人感到好奇。不過這樣也好,正可以說明這個 bug 影響的層面很廣。

其實我對這個問題是 firefox 的錯、fontconfig 的錯,還是 fontconfig 設定的問題,還有蠻大的疑問

guest
16
Promote 0 Bookmark 02011-08-24quote  

coolcd

其實我對這個問題是 firefox 的錯、fontconfig 的錯,還是 fontconfig 設定的問題,還有蠻大的疑問

的確有理。不過既然 chromium 和舊版 firefox 都可以正常顯示的話,我傾向認為是 firefox 的錯。

我已經把測試結果和初步結論貼上去了,你如果方便也可以關心一下。

https://bugzilla.mozilla.org/show_bug.cgi?id=678561

coolcd
17
Promote 0 Bookmark 02011-08-24quote  

再測過後,我認為與 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
LiberationSans-Regular.ttf: "Liberation Sans" "Regular"
odosung.ttc: "AR PL New Sung" "Regular"
helvR12-ISO8859-1.pcf.gz: "Helvetica" "Regular"
helvR12.pcf.gz: "Helvetica" "Regular"
n019003l.pfb: "Nimbus Sans L" "Regular"
DejaVuSans.ttf: "DejaVu Sans" "Book"
DejaVuSans-Bold.ttf: "DejaVu Sans" "Bold"
DejaVuSans-Oblique.ttf: "DejaVu Sans" "Oblique"
DejaVuSans-BoldOblique.ttf: "DejaVu Sans" "Bold Oblique"
mingliu.ttc: "PMingLiU" "Regular"

$ fc-match --sort helvetica|head
odosung.ttc: "AR PL New Sung" "Regular"
LiberationSans-Regular.ttf: "Liberation Sans" "Regular"
DejaVuSans.ttf: "DejaVu Sans" "Book"
DejaVuSans-Bold.ttf: "DejaVu Sans" "Bold"
DejaVuSans-Oblique.ttf: "DejaVu Sans" "Oblique"
DejaVuSans-BoldOblique.ttf: "DejaVu Sans" "Bold Oblique"
helvR12-ISO8859-1.pcf.gz: "Helvetica" "Regular"
mingliu.ttc: "PMingLiU" "Regular"
msjh.ttf: "Microsoft JhengHei" "Normal"

$ fc-match --sort sans-serif|head
odosung.ttc: "AR PL New Sung" "Regular"
DejaVuSans.ttf: "DejaVu Sans" "Book"
DejaVuSans-Bold.ttf: "DejaVu Sans" "Bold"
DejaVuSans-Oblique.ttf: "DejaVu Sans" "Oblique"
DejaVuSans-BoldOblique.ttf: "DejaVu Sans" "Bold Oblique"
LiberationSans-Regular.ttf: "Liberation Sans" "Regular"
helvR12-ISO8859-1.pcf.gz: "Helvetica" "Regular"
mingliu.ttc: "PMingLiU" "Regular"
msjh.ttf: "Microsoft JhengHei" "Normal"

回到上圖,在 .test2 中,firefox 6.0 用 Liberation Sans 顯示英文,用 AR PL New Sung 顯示中文,這代表 firefox 6.0 並沒有 fallback 到 .test2 的 cwTexHeiBold,而是用了 Helvetica。

我之所以無法判定是 firefox 的錯或 fontconfig 的錯,是因為,正常的 helvetica 字型,應該沒有中文字,所以 fallback 到第二個字型是很自然的。但在 Linux 中的 helvetica,是模擬的,如果 fontconfig 告訴 firefox,系統的 helvetica = AR PL New Sung + Liberation Sans + DejaVu Sans + Helvetica + ... ,那麼,會有這種情況發生,是不是很自然?以前的 firefox 與 chrome 沒這種現象,則有可能是對 fontconfig 支援不足所致。不管如何,以上只是我依測試結果與個人經驗推想,有可能是錯的,或者被進一步的測試推翻。

edited: 1
guest
18
Promote 0 Bookmark 02011-08-25quote  
你的推測是有道理的。 不過我當初做這個 testcase 時沒有想好,用了一個 linux 不存在的字型。如果你把 helvetica 換成其他現有的字型比方 dejavu sans,你會發現 test 2 的中文字型還是錯誤。所以到頭來 firefox 還是有問題。
coolcd
19
Promote 0 Bookmark 02011-08-25quote  

guest
你的推測是有道理的。 不過我當初做這個 testcase 時沒有想好,用了一個 linux 不存在的字型。如果你把 helvetica 換成其他現有的字型比方 dejavu sans,你會發現 test 2 的中文字型還是錯誤。所以到頭來 firefox 還是有問題。

目前覺得是 firefox 對於 CSS 指定的字型、fontconfig 中該字型的替代字型、CSS 中指定的替代字型的優先順序判斷有問題。

看到 Karl Tomlinson 在 bug678561 的回應了,希望有解決。 Laughing

edited: 1
guest
20
Promote 0 Bookmark 02011-08-25quote  

coolcd

目前覺得是 firefox 對於 CSS 指定的字型、fontconfig 中該字型的替代字型、CSS 中指定的替代字型的優先順序判斷有問題。

看到 Karl Tomlinson 在 bug678561 的回應了,希望有解決。 Laughing

Good!

不知道在此接著討論是否合適。coolcd 想請教你,你知道非 ubuntu 環境中(或是說 ubuntu 砍掉 69-language-selector-zh-*.conf),哪個檔在決定中文字型的顯示順序嗎?是否是 65-nonlatin.conf?

coolcd
21
Promote 0 Bookmark 02011-08-25quote  

guest
Good!

不知道在此接著討論是否合適。coolcd 想請教你,你知道非 ubuntu 環境中(或是說 ubuntu 砍掉 69-language-selector-zh-*.conf),哪個檔在決定中文字型的顯示順序嗎?是否是 65-nonlatin.conf?

另開了一個主題 fontconfig 字型順序的設定 來討論

cht電腦資訊字型
adm Find login register
views:59714