動手前,請先備份 charmaps/UTF-8.gz。
首先,到 unicode.org 抓一份表格(EastAsianWidth),這個表裡面定義了亞洲字形的寬度。可參考 http://www.unicode.org/reports/tr11/。
接下來我寫了一個 script 來產生符合 glibc 的 charmaps/XXX.gz 的格式。Script 裡面的
__DATA__
是我目前 charmaps/UTF-8.gz 的 WIDTH 那段中,所有寬度為零的 range。因為來源有好幾個,所以為了方便,就直接從那邊 copy 過來。./EastAsianWidth.pl UTF-8.txt
接著,
cp /usr/share/i18n/charmaps/UTF-8.gz UTF-8.gz
gunzip UTF-8.gz
解開得到 UTF-8 後,開個 editor 把檔案最後面,從 "WIDTH" 一直到 "END WIDTH" 取代成 UTF-8.txt 裡面的東西。再壓好放回去原來的位置:
gzip UTF-8
cp UTF-8.gz /usr/share/i18n/charmaps/UTF-8.gz # you need root here.
最後,執行 locale-gen,你可能會看到:
# locale-gen
Generating locales...
zh_TW.BIG5... done
zh_TW.UTF-8...
/usr/share/i18n/charmaps/UTF-8:28542: unknown character `U00002614'
/usr/share/i18n/charmaps/UTF-8:28560: unknown character `U0000FAD9'
/usr/share/i18n/charmaps/UTF-8:28564: unknown character `U0000FE19'
/usr/share/i18n/charmaps/UTF-8:28576: unknown character `U0003FFFD'
/usr/share/i18n/charmaps/UTF-8:28579: unknown character `U000E0100'
#
後面的錯誤是說,EastAsianWidth.txt 裡面定義的字,這幾個不在你的 charmaps/UTF-8 裡面。並不是什麼嚴重的問題,可以不理他。
這樣就大功告成了!接下來如果還有問題,就是 Big5 轉碼表跟字型的問題了吧。
[1] urxvt 是用 wcwidth(3)(也就是在 glibc 裡)判斷字寬。
沒有留言:
張貼留言