Tommy 碎碎念

Tommy Wu's blog

« 上一篇 | 下一篇 »

RRDTool 1.2.x 中文化 Part II
post by tommy @ 15 十二月, 2006 13:43
在上星期左右, Debian 的 Etch 有更新 RRDTool, 我發現在更新之後, 原本能出現的中文字就變成亂碼了. 原本以為是因為沒有中文化的關係, 所以直接把原本的中文化 patch 加上, 可是... 一樣是亂碼. 因為這一陣子比較忙碌, 所以先暫時換回之前 patch 過的 1.2.11 版本 . 等比較有空時, 再來看看是什麼原因.

早上花了一些時間, 看了一下 patch 過的地方, 意外的發現.... 似乎不需要 patch, 在 rrd_gfx.c 裡頭, 本身就有就 patch 的那一段程式碼, 看起來功能都一樣. 應該 1.2.1x 的程式, 本來就應該可以正確顯示中文字才對. 而且, 就算在 1.2.15 中特別加上那一段 patch 來處理, 結果仍然一樣, 可見, 不能顯示中文, 應該與 rrd_gfx.c 這兒無關.

比較了另一個有 patch 到的程式 rrd_graph.c, 發現在 1.2.15 與我之前用的 1.2.11 版之間, 有一個小差別, 就是新的程式會在設定 locale 之後, 把 LC_CTYPE 設成空的. 我把這個地方移除, 然後把 LC_ALL 設定 en_US.UTF-8 之後, 果然中文字就可以正常顯示了.

--- rrdtool-1.2.15.orig/src/rrd_graph.c	2006-07-14 20:11:26.000000000 +0800
+++ rrdtool-1.2.15/src/rrd_graph.c 2006-12-15 12:05:58.284430573 +0800
@@ -3062,9 +3062,10 @@
tzset();
#endif
#ifdef HAVE_SETLOCALE
- setlocale(LC_TIME,"");
+ //setlocale(LC_TIME,"");
+ setlocale(LC_ALL,"en_US.UTF-8");
#ifdef HAVE_MBSTOWCS
- setlocale(LC_CTYPE,"");
+ //setlocale(LC_CTYPE,"");
#endif
#endif
im->yorigin=0; 

上頭的 patch, 可以由這兒抓取: http://www.teatime.com.tw/~tommy/mypatch/rrdtool-1.2.15.patch  

經過這樣子處理之後, 就可以讓 RRDTool 正確的畫出中文字了.

Del.icio.us Furl HEMiDEMi Technorati MyShare
commons icon [1] [ 回覆 ]

請教一下,我在我的 linux 中的 locale 設定如下:
# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.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=

那程式中setlocale(LC_CTYPE,""); 是不是表示又把設定改為空了?

那如果我已經用 rpm 裝了,可否很簡單的從 patch 過的得到一個執行檔,覆蓋過原本的就可以了呢?

冒昧請教,多多包含...

commons icon [2] [ 回覆 ]

對, 程式裡頭呼叫 setlocale 會覆蓋你在外頭的設定. 通常是在程式內不去呼叫 setlocale 才會使用你目前的執行環境.

是可以自己弄一個執行檔來蓋過去. 不過既然都要 build, 直接弄一個 rpm 來裝不是比較簡單?

commons icon [3] [ 回覆 ]

Hi...謝謝你的解答

我裝的版本就是 dag 包好的 rpm,可是是沒有修過 patch 的 rpm

我剛剛已經用 tarball 重新裝一份了,因為 rpm 的程式放在 /usr/bin 底下,而 tarball build 的預設我把他定在 /usr/local/rrdtool 底下,這樣應該不會有衝突吧 :P

對了,請問一下你的圖形中用的字型是?我目前用的是微軟正黑體,但是好像跟你的還是有差,我的在字數筆劃多一點的時候,還是會黑黑一團,可否請教您的字型呢?

commons icon [4] [ 回覆 ]

我是用正黑體. (title 用粗體)

迴響
暱稱:
標題:
個人網頁:
電子郵件:
迴響

  

Bad Behavior 已經阻擋了 256 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS