什么是glibc?glibc是什么?什么是freetype?freetype是什么?什么是?Xlib是什么?什么是lo

什么是glibc?glibc是什么?什么是freetype?freetype是什么?什么是?Xlib是什么?什么是locale?
說說EasyWine的亂碼問題
EW是個(gè)好東西,有了它,wine一下子就從雞肋變成雞大腿了,好多軟件都可以順利安裝,而不需要去研究wine的配置了。
不過呢,好多朋友下載了EW之后,確實(shí)乘興而來,敗興而歸,為啥?看不懂,中文全都是亂碼。若說是老外寫的程序,不支持中文,亂碼也還情有可原,可是EW分明是咱們的民族軟件,為啥會(huì)亂碼呢?而且,這個(gè)亂碼還特別的難纏,任你費(fèi)九牛二虎之力,它還是我行我素。怎么辦呢?
先來說說亂碼產(chǎn)生的原因。要說亂碼,這個(gè)話就長(zhǎng)了,咱們先看看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è)圖簡(jiǎn)單的說明了一下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)來的圖形引擎,有自己的文字繪制引擎。這里面,對(duì)于配置系統(tǒng)字體最重要的就是fontconfig了,fontconfig負(fù)責(zé)管理系統(tǒng)內(nèi)所有的字體文件,給他們建立fonts.cache,并根據(jù)fonts.conf的配置選取合適的字體進(jìn)行顯示。
最后還有g(shù)libc,glibc是什么?即使c的運(yùn)行庫(kù),這個(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的,這對(duì)于絕大多數(shù)應(yīng)用來說,都足夠了,可以獲得非常完美中文顯示效果。事情壞就壞在還有很多老的程序不支持fontconfig,尤其是很多gtk+1.0的應(yīng)用,比如xmms這種常用的程序。
長(zhǎng)話短說了,上面廢話太多,還是說說具體怎么配置吧。
首先,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對(duì)不對(duì),記住把/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è)配置,就不能正確顯示中文了,比如亂碼,部分亂碼什么的。
好了,現(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è)文件,分別對(duì)應(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
樓主的方法對(duì)于2.65版可能行不通了:
我原來用2.6 beta版的時(shí)候,用這種方法在debian中,UTF8下可以很好地顯示窗口中的文字,可是桌面菜單和程序菜單中全是亂碼,沒辦法只好自己改。
可是升級(jí)到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
這里答了你問題,另外問問題的話,最好新開一貼
--------------------------------------------------------------------------------
作者: pinuoca o 時(shí)間: 2006-4-28 16:06
我運(yùn)行了vim /etc/X11/xorg.conf
卻沒有FontPath顯示
--------------------------------------------------------------------------------
作者: deman 時(shí)間: 2006-4-28 17:11
你的是什么系統(tǒng)?
--------------------------------------------------------------------------------
作者: pinuoca o 時(shí)間: 2006-4-28 17:51
我裝的是 red hat linux9.0的
--------------------------------------------------------------------------------
作者: deman 時(shí)間: 2006-4-28 17:57
LOCALE 是什么?
--------------------------------------------------------------------------------
作者: pinuoca o 時(shí)間: 2006-4-28 18:19
GB18030
--------------------------------------------------------------------------------
作者: pinuoca o 時(shí)間: 2006-4-28 18:34
utf8
--------------------------------------------------------------------------------
作者: deman 時(shí)間: 2006-4-28 18:53
那嘗試使用非utf8
相關(guān)文章
Fedora Linux 42 穩(wěn)定版發(fā)布: 帶來大量新功能和軟件更新
Fedora 42昨日發(fā)布,這是 Red Hat 贊助開發(fā)的杰出前沿 Linux 發(fā)行版的最新版,包含大量新功能和軟件更新,使其成為 2025 年上半年發(fā)布的一款出色的 Linux 操作系統(tǒng)之一,內(nèi)2025-04-16如何在Linux查看硬盤信息? 查看Linux硬盤大小類型和硬件信息的5種方法
使用Linux系統(tǒng)的過程中,查看和了解硬盤信息是非常重要的工作,尤其是對(duì)于系統(tǒng)管理員而言,那么在Linux系統(tǒng)中如何查看硬盤信息?以下是具體內(nèi)容介紹2025-03-12如何在 Linux 中查看 CPU 詳細(xì)信息? 3招輕松查看CPU型號(hào)、核心數(shù)和溫度
在日常運(yùn)維工作中,獲取 CPU 信息是系統(tǒng)運(yùn)維管理員常見的工作內(nèi)容,無論是為了性能調(diào)優(yōu)、硬件升級(jí)還是僅僅滿足好奇心2025-03-11什么是 Arch Linux? 獨(dú)樹一幟的Arch Linux發(fā)行版分析
Arch Linux是為簡(jiǎn)化,優(yōu)化,現(xiàn)代化,實(shí)用主義,用戶中心和多功能性而創(chuàng)建Linux發(fā)行版,究竟是什么讓 Arch 與眾不同?下面我們就來簡(jiǎn)要解讀2025-02-19如何在Linux環(huán)境下制作 Win11裝機(jī)U盤?
一直用的linux辦公,想要將筆記本電腦從 Linux 系統(tǒng)切換回 Windows 11,我們可以制作一個(gè)win11裝機(jī)u盤,詳細(xì)如下2025-02-17Rsnapshot怎么用? 基于Rsync的強(qiáng)大Linux備份工具使用指南
Rsnapshot 不僅可以備份本地文件,還能通過 SSH 備份遠(yuǎn)程文件,接下來詳細(xì)介紹如何安裝、配置和使用 Rsnapshot,包括創(chuàng)建每小時(shí)、每天、每周和每月的本地備份,以及如何進(jìn)2025-02-06Linux Kernel 6.13發(fā)布:附更新內(nèi)容及新特性解讀
Linux 內(nèi)核 6.13 正式發(fā)布,新版本引入了惰性搶占支持,簡(jiǎn)化內(nèi)核搶占邏輯,通過減少與調(diào)度器相關(guān)的調(diào)用次數(shù),讓內(nèi)核在運(yùn)行時(shí)表現(xiàn)更優(yōu),從而提高效率2025-01-23五大特性引領(lǐng)創(chuàng)新! 深度操作系統(tǒng) deepin 25 Preview預(yù)覽版發(fā)布
今日,深度操作系統(tǒng)正式推出deepin 25 Preview版本,該版本集成了五大核心特性:磐石系統(tǒng)、全新DDE、Treeland窗口合成器、AI For OS以及Distrobox子系統(tǒng)2025-01-18Linux Mint Xia 22.1重磅發(fā)布: 重要更新一覽
Beta 版 Linux Mint“Xia” 22.1 發(fā)布,新版本基于 Ubuntu 24.04,內(nèi)核版本為 Linux 6.8,這次更新帶來了諸多優(yōu)化和改進(jìn),進(jìn)一步鞏固了 Mint 在 Linux 桌面操作系統(tǒng)領(lǐng)域的2025-01-16LinuxMint怎么安裝? Linux Mint22下載安裝圖文教程
Linux Mint22發(fā)布以后,有很多新功能,很多朋友想要下載并安裝,該怎么操作呢?下面我們就來看看詳細(xì)安裝指南2025-01-16