什么是glibc?glibc是什么?什么是freetype?freetype是什么?什么是?Xlib是什么?什么是lo
發(fā)布日期:2022-08-05 13:55 | 文章來源:CSDN
什么是glibc?glibc是什么?什么是freetype?freetype是什么?什么是?Xlib是什么?什么是locale?
說說EasyWine的亂碼問題
EW是個(gè)好東西,有了它,wine一下子就從雞肋變成雞大腿了,好多軟件都可以順利安裝,而不需要去研究wine的配置了。當(dāng)然,暫時(shí)還是雞大腿,希望以后能吃出雞翅的味道:-)
不過呢,好多朋友下載了EW之后,確實(shí)乘興而來,敗興而歸,為啥?看不懂,中文全都是亂碼。若說是老外寫的程序,不支持中文,亂碼也還情有可原,可是EW分明是咱們的民族軟件,為啥會(huì)亂碼呢?而且,這個(gè)亂碼還特別的難纏,任你費(fèi)九牛二虎之力,它還是我行我素。怎么辦呢?
先來說說亂碼產(chǎn)生的原因。要說亂碼,這個(gè)話就長了,咱們先看看linux下面的字體解決方案。
EasyWine LumaQQ
Xdialog firefox-1.0 kde
xmms zenity firefox-1.5 qterm
| | | |
| | | |
| | | |
gtk+-1.0 gtk+-2.0 gtk+-2.8 qt
| | | |
| | | |
| | | |
| pango cario |
| | | |
| | | |
| | | |
| freetype freetype freetype
Xlib fontconfig fontconfig libXft
freetype libXft | |
| | | |
| | | |
|__________________|______________________|___________________|
|
|
glibc
上面這個(gè)圖簡單的說明了一下Xwindow下面最常見的幾種自己解決方案。
最早最原始的方法就是調(diào)用Xlib里面的字體函數(shù)顯示文字,很多早期的應(yīng)用程序都使用這種方式,比如xterm什么的,當(dāng)然也是最難用的,效果不佳,效率也差。gtk+ 1.0版本就是用xlib來顯示文字,所以所有基于gtk+1.0的程序也就跟著使用x核心字體了。X核心字體,顧名思義,就是x內(nèi)建的文字顯示功能。Xwindow啟動(dòng)的時(shí)候,從配置文件得到字體所在路徑,從字體目錄里面的fonts.dir fonts.scale encodings.dir等文件得到具體的字體信息,通過freetype type1等字體模塊來讀取字體文件。這種方式使用起來不是很靈活,而且字體顯示效率也不高,已經(jīng)逐漸被淘汰了。
現(xiàn)在最常見字體系統(tǒng)就是libxft2+fontconfig+freetype的組合了,libxft2是字體繪制引擎,負(fù)責(zé)文字顯示;fontconfig負(fù)責(zé)字體的選擇控制;freetype用來讀取字體文件。cario是gtk+2.8最新引進(jìn)來的圖形引擎,有自己的文字繪制引擎。這里面,對于配置系統(tǒng)字體最重要的就是fontconfig了,fontconfig負(fù)責(zé)管理系統(tǒng)內(nèi)所有的字體文件,給他們建立fonts.cache,并根據(jù)fonts.conf的配置選取合適的字體進(jìn)行顯示。
最后還有g(shù)libc,glibc是什么?即使c的運(yùn)行庫,這個(gè)是出了內(nèi)核意外所有程序都要用到的。glibc跟字體有什么關(guān)系?沒關(guān)系!不過跟locale有關(guān)系。什么是locale? 我也不知道,方正就是一大堆的東西,告訴你文字用什么編碼啊,時(shí)間用什么格式等等,基本上就相當(dāng)于一個(gè)語言環(huán)境。在程序里面,一段文字,可能是用unicode存儲(chǔ)的,但是我們的運(yùn)行環(huán)境是gb2312,怎么把unicode的文字變成gb2312編碼的文字,這個(gè)就要靠glibc了。所以想要正常使用中文,還要保證glibc也支持中文。
好了,關(guān)于字體系統(tǒng)就說這么多了。fontconfig是很先進(jìn)的解決方案,非常靈活,配置也很方便,網(wǎng)上資料也比較多。通常大家的中文解決方案,都是基于fontconfig的,這對于絕大多數(shù)應(yīng)用來說,都足夠了,可以獲得非常完美中文顯示效果。事情壞就壞在還有很多老的程序不支持fontconfig,尤其是很多gtk+1.0的應(yīng)用,比如xmms這種常用的程序。
長話短說了,上面廢話太多,還是說說具體怎么配置吧。
首先,glibc。運(yùn)行l(wèi)ocale -a,看看你的系統(tǒng)支持zh_CN gb2312 utf-8什么的不。支持 ---> ok。 不支持 ---》 想辦法吧(呵呵,比較罕見的)。
然后就要看看我們的字體文件都在哪里了。通常,字體文件會(huì)放在/usr/share/fonts或者/usr/X11R6/lib/fonts里面。里面還有很多目錄,存放了各種字體文件。假設(shè)我們從windows下面考了個(gè)simsun.ttc放在/usr/share/fonts/local里面。
vim /etc/X11/xorg.conf
看看FontPath對不對,記住把/usr/share/fonts/local加進(jìn)去,還有module里面不要忘記加載freetype模塊。
Ok, 各位看官注意了,下面一步很關(guān)鍵,而且很少有人注意到,很多亂碼無法解決都是它引起的。
cd /usr/share/fonts/encodings
mkfontscale -e . -e large
mkfontdir -e . -e large
cd ..
ln -snf /encodings
干什么?生成encodings.dir這個(gè)字體編碼文件。xlib需要根據(jù)這個(gè)文件里面的配置來正確解讀不同的文字編碼。如果這個(gè)xlib找不到這個(gè)配置,就會(huì)無法正確顯示中文了,比如亂碼,部分亂碼什么的。
好了,現(xiàn)在重新啟動(dòng)X ---為了使這個(gè)encodings.dir生效,很重要的。
cd /usr/share/fonts/local
mkfontscale
mkfontdir
再次重啟X, 這樣simsun就可以正常使用了。運(yùn)行xfontsel,因該可以看到simsun了。
現(xiàn)在配置gtkrc來控制gtk+按照我們的意愿選擇字體,比如英文用verdana, 中文用simsun。(verdana哪里來?windows下面找去)
/etc/gtk/這個(gè)目錄里面有很多gtkrc.xxx,分別控制不同locale時(shí)的字體方案。我們主要關(guān)心gtkrc.zh_CN和gtkrc.utf-8這兩個(gè)文件,分別對應(yīng)zh_CN和UTF-8這兩個(gè)locale。比如zh_CN.GB2312就使用gtkrc.zh_CN,en_US.UTF-8就使用gtkrc.utf-8。How about zh_CN.UTF-8?呵呵,這個(gè)用的是gtkrc.utf-8。
/etc/gtk/gtkrc.zh_CN
style "gtk-default-zh_CN" {
fontset = "-*-verdana-medium-r-normal--12-*-*-*-*-*-iso8859-1,\
-*-simsun-medium-r-normal--12-*-*-*-*-*-iso10646-1,\
*-r-*"
}
class "GtkWidget" style "gtk-default-zh_CN"
意思就是當(dāng)系統(tǒng)語言是中文,顯示文字時(shí),首先找verdana這個(gè)字體,如果能顯示,ok;如果不能,繼續(xù),看看simsun行不,行,ok;還不行,隨便找啦,找到能用就ok啦。
可以把/etc/gtk/gtkrc.utf-8做成gtkrc.zh_CN的一個(gè)鏈接。
ln -snf /etc/gtk/gtkrc.zh_CN /etc/gtk/gtkrc.utf-8
Ok. Now, type
EasyWine
看看還是不是亂碼了?還亂碼?跟我說,呵呵,咱們繼續(xù)研究。
怎么看當(dāng)前的locale?
locale
就可以了。
怎么設(shè)置locale?修改~/.profile,里面加上
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
夜深了,明早還要上班,不說了,以后有空再說吧。
BTW: Deman還是趁早換到zenity吧,不要用Xdialog了,這樣就沒這么多亂碼問題了。呵呵,不過俺這篇文章也沒價(jià)值了
--------------------------------------------------------------------------------
作者: deman 時(shí)間: 2006-1-3 10:40
好文章,不過zenity在kde下很有問題啊.我在kde下都編譯不成功啊.n次都失敗.
--------------------------------------------------------------------------------
作者: peaker 時(shí)間: 2006-1-21 22:32
樓主的方法對于2.65版可能行不通了:
我原來用2.6 beta版的時(shí)候,用這種方法在debian中,UTF8下可以很好地顯示窗口中的文字,可是桌面菜單和程序菜單中全是亂碼,沒辦法只好自己改。
可是升級到2.65版后,原來的方法都不行了,用這些方法都是亂碼。于是我把\usr\bin下的easywine(可執(zhí)行文件)用kwrite打開,另存為gbk編碼的,覆蓋原文件。 然后運(yùn)行easywine。窗口可以正常顯示漢字了(暈,utf8下必須使用非utf8的編碼才可以正常顯示?), 但是桌面菜單和程序菜單還是亂碼。
easywine改成了gbk編碼是不是影響了桌面菜單和程序菜單的編碼?。?
--------------------------------------------------------------------------------
作者: deman 時(shí)間: 2006-1-21 22:42
http://www.easywine.org/bbs/view ... &extra=page%3D1
這里答了你問題,另外問問題的話,最好新開一貼
--------------------------------------------------------------------------------
作者: pinuocao 時(shí)間: 2006-4-28 16:06
我運(yùn)行了vim /etc/X11/xorg.conf
卻沒有FontPath顯示
--------------------------------------------------------------------------------
作者: deman 時(shí)間: 2006-4-28 17:11
你的是什么系統(tǒng)?
--------------------------------------------------------------------------------
作者: pinuocao 時(shí)間: 2006-4-28 17:51
我裝的是 red hat linux9.0的
--------------------------------------------------------------------------------
作者: deman 時(shí)間: 2006-4-28 17:57
LOCALE 是什么?
--------------------------------------------------------------------------------
作者: pinuocao 時(shí)間: 2006-4-28 18:19
GB18030
--------------------------------------------------------------------------------
作者: pinuocao 時(shí)間: 2006-4-28 18:34
utf8
--------------------------------------------------------------------------------
作者: deman 時(shí)間: 2006-4-28 18:53
那嘗試使用非utf8
說說EasyWine的亂碼問題
EW是個(gè)好東西,有了它,wine一下子就從雞肋變成雞大腿了,好多軟件都可以順利安裝,而不需要去研究wine的配置了。當(dāng)然,暫時(shí)還是雞大腿,希望以后能吃出雞翅的味道:-)
不過呢,好多朋友下載了EW之后,確實(shí)乘興而來,敗興而歸,為啥?看不懂,中文全都是亂碼。若說是老外寫的程序,不支持中文,亂碼也還情有可原,可是EW分明是咱們的民族軟件,為啥會(huì)亂碼呢?而且,這個(gè)亂碼還特別的難纏,任你費(fèi)九牛二虎之力,它還是我行我素。怎么辦呢?
先來說說亂碼產(chǎn)生的原因。要說亂碼,這個(gè)話就長了,咱們先看看linux下面的字體解決方案。
EasyWine LumaQQ
Xdialog firefox-1.0 kde
xmms zenity firefox-1.5 qterm
| | | |
| | | |
| | | |
gtk+-1.0 gtk+-2.0 gtk+-2.8 qt
| | | |
| | | |
| | | |
| pango cario |
| | | |
| | | |
| | | |
| freetype freetype freetype
Xlib fontconfig fontconfig libXft
freetype libXft | |
| | | |
| | | |
|__________________|______________________|___________________|
|
|
glibc
上面這個(gè)圖簡單的說明了一下Xwindow下面最常見的幾種自己解決方案。
最早最原始的方法就是調(diào)用Xlib里面的字體函數(shù)顯示文字,很多早期的應(yīng)用程序都使用這種方式,比如xterm什么的,當(dāng)然也是最難用的,效果不佳,效率也差。gtk+ 1.0版本就是用xlib來顯示文字,所以所有基于gtk+1.0的程序也就跟著使用x核心字體了。X核心字體,顧名思義,就是x內(nèi)建的文字顯示功能。Xwindow啟動(dòng)的時(shí)候,從配置文件得到字體所在路徑,從字體目錄里面的fonts.dir fonts.scale encodings.dir等文件得到具體的字體信息,通過freetype type1等字體模塊來讀取字體文件。這種方式使用起來不是很靈活,而且字體顯示效率也不高,已經(jīng)逐漸被淘汰了。
現(xiàn)在最常見字體系統(tǒng)就是libxft2+fontconfig+freetype的組合了,libxft2是字體繪制引擎,負(fù)責(zé)文字顯示;fontconfig負(fù)責(zé)字體的選擇控制;freetype用來讀取字體文件。cario是gtk+2.8最新引進(jìn)來的圖形引擎,有自己的文字繪制引擎。這里面,對于配置系統(tǒng)字體最重要的就是fontconfig了,fontconfig負(fù)責(zé)管理系統(tǒng)內(nèi)所有的字體文件,給他們建立fonts.cache,并根據(jù)fonts.conf的配置選取合適的字體進(jìn)行顯示。
最后還有g(shù)libc,glibc是什么?即使c的運(yùn)行庫,這個(gè)是出了內(nèi)核意外所有程序都要用到的。glibc跟字體有什么關(guān)系?沒關(guān)系!不過跟locale有關(guān)系。什么是locale? 我也不知道,方正就是一大堆的東西,告訴你文字用什么編碼啊,時(shí)間用什么格式等等,基本上就相當(dāng)于一個(gè)語言環(huán)境。在程序里面,一段文字,可能是用unicode存儲(chǔ)的,但是我們的運(yùn)行環(huán)境是gb2312,怎么把unicode的文字變成gb2312編碼的文字,這個(gè)就要靠glibc了。所以想要正常使用中文,還要保證glibc也支持中文。
好了,關(guān)于字體系統(tǒng)就說這么多了。fontconfig是很先進(jìn)的解決方案,非常靈活,配置也很方便,網(wǎng)上資料也比較多。通常大家的中文解決方案,都是基于fontconfig的,這對于絕大多數(shù)應(yīng)用來說,都足夠了,可以獲得非常完美中文顯示效果。事情壞就壞在還有很多老的程序不支持fontconfig,尤其是很多gtk+1.0的應(yīng)用,比如xmms這種常用的程序。
長話短說了,上面廢話太多,還是說說具體怎么配置吧。
首先,glibc。運(yùn)行l(wèi)ocale -a,看看你的系統(tǒng)支持zh_CN gb2312 utf-8什么的不。支持 ---> ok。 不支持 ---》 想辦法吧(呵呵,比較罕見的)。
然后就要看看我們的字體文件都在哪里了。通常,字體文件會(huì)放在/usr/share/fonts或者/usr/X11R6/lib/fonts里面。里面還有很多目錄,存放了各種字體文件。假設(shè)我們從windows下面考了個(gè)simsun.ttc放在/usr/share/fonts/local里面。
vim /etc/X11/xorg.conf
看看FontPath對不對,記住把/usr/share/fonts/local加進(jìn)去,還有module里面不要忘記加載freetype模塊。
Ok, 各位看官注意了,下面一步很關(guān)鍵,而且很少有人注意到,很多亂碼無法解決都是它引起的。
cd /usr/share/fonts/encodings
mkfontscale -e . -e large
mkfontdir -e . -e large
cd ..
ln -snf /encodings
干什么?生成encodings.dir這個(gè)字體編碼文件。xlib需要根據(jù)這個(gè)文件里面的配置來正確解讀不同的文字編碼。如果這個(gè)xlib找不到這個(gè)配置,就會(huì)無法正確顯示中文了,比如亂碼,部分亂碼什么的。
好了,現(xiàn)在重新啟動(dòng)X ---為了使這個(gè)encodings.dir生效,很重要的。
cd /usr/share/fonts/local
mkfontscale
mkfontdir
再次重啟X, 這樣simsun就可以正常使用了。運(yùn)行xfontsel,因該可以看到simsun了。
現(xiàn)在配置gtkrc來控制gtk+按照我們的意愿選擇字體,比如英文用verdana, 中文用simsun。(verdana哪里來?windows下面找去)
/etc/gtk/這個(gè)目錄里面有很多gtkrc.xxx,分別控制不同locale時(shí)的字體方案。我們主要關(guān)心gtkrc.zh_CN和gtkrc.utf-8這兩個(gè)文件,分別對應(yīng)zh_CN和UTF-8這兩個(gè)locale。比如zh_CN.GB2312就使用gtkrc.zh_CN,en_US.UTF-8就使用gtkrc.utf-8。How about zh_CN.UTF-8?呵呵,這個(gè)用的是gtkrc.utf-8。
/etc/gtk/gtkrc.zh_CN
style "gtk-default-zh_CN" {
fontset = "-*-verdana-medium-r-normal--12-*-*-*-*-*-iso8859-1,\
-*-simsun-medium-r-normal--12-*-*-*-*-*-iso10646-1,\
*-r-*"
}
class "GtkWidget" style "gtk-default-zh_CN"
意思就是當(dāng)系統(tǒng)語言是中文,顯示文字時(shí),首先找verdana這個(gè)字體,如果能顯示,ok;如果不能,繼續(xù),看看simsun行不,行,ok;還不行,隨便找啦,找到能用就ok啦。
可以把/etc/gtk/gtkrc.utf-8做成gtkrc.zh_CN的一個(gè)鏈接。
ln -snf /etc/gtk/gtkrc.zh_CN /etc/gtk/gtkrc.utf-8
Ok. Now, type
EasyWine
看看還是不是亂碼了?還亂碼?跟我說,呵呵,咱們繼續(xù)研究。
怎么看當(dāng)前的locale?
locale
就可以了。
怎么設(shè)置locale?修改~/.profile,里面加上
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
夜深了,明早還要上班,不說了,以后有空再說吧。
BTW: Deman還是趁早換到zenity吧,不要用Xdialog了,這樣就沒這么多亂碼問題了。呵呵,不過俺這篇文章也沒價(jià)值了
--------------------------------------------------------------------------------
作者: deman 時(shí)間: 2006-1-3 10:40
好文章,不過zenity在kde下很有問題啊.我在kde下都編譯不成功啊.n次都失敗.
--------------------------------------------------------------------------------
作者: peaker 時(shí)間: 2006-1-21 22:32
樓主的方法對于2.65版可能行不通了:
我原來用2.6 beta版的時(shí)候,用這種方法在debian中,UTF8下可以很好地顯示窗口中的文字,可是桌面菜單和程序菜單中全是亂碼,沒辦法只好自己改。
可是升級到2.65版后,原來的方法都不行了,用這些方法都是亂碼。于是我把\usr\bin下的easywine(可執(zhí)行文件)用kwrite打開,另存為gbk編碼的,覆蓋原文件。 然后運(yùn)行easywine。窗口可以正常顯示漢字了(暈,utf8下必須使用非utf8的編碼才可以正常顯示?), 但是桌面菜單和程序菜單還是亂碼。
easywine改成了gbk編碼是不是影響了桌面菜單和程序菜單的編碼?。?
--------------------------------------------------------------------------------
作者: deman 時(shí)間: 2006-1-21 22:42
http://www.easywine.org/bbs/view ... &extra=page%3D1
這里答了你問題,另外問問題的話,最好新開一貼
--------------------------------------------------------------------------------
作者: pinuocao 時(shí)間: 2006-4-28 16:06
我運(yùn)行了vim /etc/X11/xorg.conf
卻沒有FontPath顯示
--------------------------------------------------------------------------------
作者: deman 時(shí)間: 2006-4-28 17:11
你的是什么系統(tǒng)?
--------------------------------------------------------------------------------
作者: pinuocao 時(shí)間: 2006-4-28 17:51
我裝的是 red hat linux9.0的
--------------------------------------------------------------------------------
作者: deman 時(shí)間: 2006-4-28 17:57
LOCALE 是什么?
--------------------------------------------------------------------------------
作者: pinuocao 時(shí)間: 2006-4-28 18:19
GB18030
--------------------------------------------------------------------------------
作者: pinuocao 時(shí)間: 2006-4-28 18:34
utf8
--------------------------------------------------------------------------------
作者: deman 時(shí)間: 2006-4-28 18:53
那嘗試使用非utf8
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
相關(guān)文章