Unicode
出自DebianWiki
目錄 |
[編輯] 所需特別套件
unifont (fixed 的 Unicode 字型) 或 xfonts-wqy (文泉驛 Unicode 字型)
註: 文泉驛字型套件可在 本地 APTDOT repository 找到
[編輯] 什麼是 Unicode?
簡而言之, Unicode 為一 ISO 國際標準,它包含了世界各國的常用文字,可支援數百萬個字碼。它的目的是統一世界各國之編碼,讓世界文字萬碼奔騰的狀況不復出現。
註:UTF-8 為 Unicode 的編碼方式之一。
[編輯] 為什麼要轉入 Unicode 環境?
在這個資訊爆發的時代,國際化早就是無法抗拒之潮流。 不管是在 Web 上、新聞、郵件、文件中, 我們常常遇到必須處理多國文字的狀況。 再加上 Big5 中文編碼上的設計缺陷以及字數嚴重不足等等問題, 全面轉換至 Unicode 環境似乎是不可避免的...
[編輯] 在 Linux 中,如何轉入 Unicode 環境?
請先產生 UTF-8 的 Locales,例:# 在 /etc/locale.gen 中,加入 zh_TW.UTF-8 UTF-8 及其它您所需要的 Locales。 cat >> /etc/locale.gen << EOF en_US.UTF-8 UTF-8 ja_JP.EUC-JP EUC-JP ja_JP.UTF-8 UTF-8 zh_TW.UTF-8 UTF-8 EOF # 執行 locale-gen 來產生這些 locales 資訊檔。 locale-gen
再設定好 Locale 的環境變數,
就可以改變現正所使用的 Locale。
您可以把這些環境變數寫在 ~/.bashrc、~/.xinitrc 或是 ~/.xsession 中,
#!/bin/sh # $Xorg: xinitrc.cpp,v 1.3 2000/08/17 19:54:30 cpqbld Exp $ # /etc/X11/xinit/xinitrc # # global xinitrc file, used by all X sessions started by xinit (startx) export LANG=zh_TW.UTF-8 export LC_ALL=zh_TW.UTF-8 # invoke global X session script . /etc/X11/Xsession
[編輯] 在 Linux 上轉入 Unicode 環境時所帶來之挑戰及解決方案
[編輯] 檔案名稱編碼問題
檔案名稱的編碼影響到的將會是我們能否順利在 Linux 下看到正確的檔案名稱。
[編輯] vfat
如果是 vfat 的磁碟區,
那麼內定就是使用 UTF-8 編碼來儲存檔名。
所以只要使用以下方式來掛載 vfat 磁區,就可以無痛將檔案名稱轉換為 UTF-8 編碼了:
(請將其寫在 /etc/fstab 裡)
/dev/hda5 /FAT32 vfat utf8=1,gid=disk,fmask=113,dmask=002,umask=002 0 0
[編輯] ntfs
而 NTFS 分割區也是類似, 請以以下方式來掛載 NTFS 分割區:
/dev/hda2 /NTFS ntfs nls=utf8,gid=disk,fmask=113,dmask=002,umask=002 0 0
應該就能正確得讀取 UTF-8 編碼的檔案名稱了。
註:fmask=113,dmask=002 是 Linux Kernel 2.6.x 才有支援的掛載選項。
[編輯] ext2/ext3
但,如果是 ext2/ext3 之類的磁碟區呢?
Linux 所使用的 ext2/ext3 之類的磁碟區,
在儲存檔名時是以其原始編碼存入磁碟的,
所以我們可能需要某些工具程式來轉換這些檔案名稱,例如 convmv:
# 將在 /Path/To/Your/Files 裡的 Big5 編碼檔名轉換成 UTF-8 編碼 # 請用 ./convmv --help 或是 man ./convmv.1.gz 來得到其參數之說明 # 使用 --list 來查看已支援之編碼 # 其中,-f 為原始編碼,-t 為輸出編碼;-r 表是進行遞迴處理 # 以下將會輸出轉換結果,但不會實地進行轉換 ./convmv -f big5-eten -t utf8 -r /Path/To/Your/Files # 實地進行轉換 ./convmv -f big5-eten -t utf8 -r --notest /Path/To/Your/Files
筆者測試過,它可以成功轉換像是「功蓋許」等特殊檔名,是一個很不錯用的小程式。
[編輯] X Terminal
我想,能夠完整支援 UTF-8 的 X Terminal 不少。 其中,筆者所使用的是 MLTerm。
為了能夠加快 MLTerm 的顯示速度, 筆者關掉了它的 Anti-Alias 功能,並設定它在處理字串時採用 Unicode 編碼。 (請修改 /etc/mlterm/main 或 ~/.mlterm/main)
# 在處理字串時,如複製貼上時,將其轉換成 Unicode 編碼。 receive_string_via_ucs=true # 不使用 Anti-Alias 字型。 use_anti_alias=false
設定所使用的 Non-Anti-Alias 之 Unicode 字型: (請修改 /etc/mlterm/font 或 ~/.mlterm/font)
ISO8859_1 = -gnu-unifont-medium-r-normal--16-160-75-75-c-80-iso10646-1; ISO10646_UCS4_1 = -gnu-unifont-medium-r-normal--16-160-75-75-c-80-iso10646-1; ISO10646_UCS4_1_BIWIDTH = -gnu-unifont-medium-r-normal--16-160-75-75-c-80-iso10646-1;
MLTerm 可以支援多國語系、支援 XIM、支援透明背景,也有 GUI 的設定介面,是不可多得的好 X Terminal!
[編輯] 中文輸入法
XCin 在加上 Patches 之後,就可以在 zh_TW.UTF-8 下運作了,
而幸運的是,這個 Patch 已被 Debian 官方所接受,
所以 Debian User 就不必費心去加 Patch 了。
但是它必須先於 zh_TW.Big5 下執行,才能將 Locale 轉換為 zh_TW.UTF-8;
換句話說,在您的系統中,仍必須保有 zh_TW.Big5 這個 Locale。
以 ~/.xinitrc 為例:
#!/bin/sh # $Xorg: xinitrc.cpp,v 1.3 2000/08/17 19:54:30 cpqbld Exp $ # /etc/X11/xinit/xinitrc # # global xinitrc file, used by all X sessions started by xinit (startx) export LC_ALL=zh_TW.Big5 export LANG=zh_TW.Big5 export XMODIFIERS="@im=xcin" exec /usr/bin/xcin & export LANG=zh_TW.UTF-8 export LC_ALL=zh_TW.UTF-8 # invoke global X session script . /etc/X11/Xsession
而像是 SCIM 等等輸入法則直接能夠在 zh_TW.UTF-8 環境下運作。 如果您有興趣則不妨試試看!
註:要在不同 locale 的 utf-8 環境中使用 SCIM ,請修改 /etc/scim/global (或相對應的個人設定檔):
/SupportedUnicodeLocales = en_US.UTF-8,zh_TW.UTF-8,ja_JP.UTF-8
即可使 SCIM 在 zh_TW、ja_JP 的 utf-8 環境運作。
[編輯] xlib based 程式:(xedit 等等)
只要指定讓 xlib based 程式使用 Unicode 字型,如:unifont或文泉驛字型(xfonts-wqy), 應該就能讓 xlib based 程式在 Unicode 環境下運作。
在 X resources 的設定檔 (如 /etc/X11/Xresources 下的檔案或 ~/.Xdefaults) 中 加入:
xtDefaultFontSet: -wenquanyi-*-medium-r-normal--13-*-*-*-*-*-iso10646-1 *International: True
就能使所有使用 X Toolkit 的 程式支援 Unicode 了。
[編輯] Gtk+ based 程式:(XMMS、GIMP 1.2 等等)
只要在 /etc/gtk/gtkrc.utf-8 中指定讓 Gtk+ based 程式使用 Unicode 字型,如:
style "default-text" {
fontset = "-sony-fixed-medium-r-normal--16-150-75-75-c-80-iso8859-1,\
-gnu-unifont-medium-r-normal--16-160-75-75-c-80-iso10646-1"
}
class "GtkWidget" style "default-text"
應該就能讓 Gtk+ based 程式在 Unicode 環境下順利運作。
註:加上 Sony 的英文字型是因為在 ja_JA.UTF-8 的環境下, 似乎抓不到 unifont 的英文字...(怪!)
但是 XMMS 將也會以 UTF-8 編碼來讀取 ID3 tag,所以反而會在 XMMS 視窗裡出現亂碼。 解決方案是把所有的 ID3 tag 轉換成 UTF-8 編碼,或是在播放時顯示檔案名稱。
註:gnu的這個字體包,其中的中文字大小不一,不美觀,可使用文泉驛的字體,設置如下:
style "default-text" {
fontset = "-monotype-arial-medium-r-normal-*-15-*-*-*-p-*-iso8859-1,\
-wqy-*-*-*-*-*-16-160-*-*-*-*-iso10646-1"
}
class "GtkWidget" style "default-text"
[編輯] 套件wqy-unifont
style "default-text" {
fontset = "-wqy-yhunifont-medium-r-normal--16-160-75-75-c-80-iso10646-1"
}
class "GtkWidget" style "default-text"
[編輯] 套件xfonts-wqy
style "default-text" {
fontset = "-wenquanyi-wenquanyi bitmap song-medium-r-normal--16-160-75-75-c-80-iso10646-1"
}
class "GtkWidget" style "default-text"
[編輯] Gtk+ based 程式:(XMMS、GIMP 1.2 等等)方法二
(Tetralet 注:以下為網友修改後的文章。但在敝人的系統上卻沒有作用)
只要以root身份新增您的GTK+語系設定檔,如下:
ln -s /etc/gtk/gtkrc.zh_TW /etc/gtk/gtkrc.zh_TW.utf-8
就能讓 xlib 程式在 Unicode 環境下順利運作。
讓gtk+使用新宋體的方法:
style "gtk-default-zh-tw" {
fontset = "-monotype-arial-medium-r-normal-*-15-*-*-*-p-*-iso8859-1,\
-arphic-ar pl new sung-medium-r-normal-*-15-*-*-*-m-*-big5-0"
}
class "GtkWidget" style "gtk-default-zh-tw"
但缺點是日文字不會正常顯示,韓文也是。想來簡體字應該也無法吧… 待改進。
[編輯] QT Based 程式
為了能在 QT Based 的程式裡正常顯示 Unicode,建議您安裝支援 Unicode 的字型,如:DFSongSd.ttf,並執行 qt-config,讓 QT Based 程式使用這個 Unicode 字型做為預設的字型。
注意:DFSongSD.ttf 為 freeware,但是並不是 Free Software。
請依您喜好來決定是否要下載使用這個字型。
否則,在必須顯示多國文字時,常常看到的會是莫名其妙的空白...
[編輯] Gtk2+ Based 程式
Gtk2+ Based 程式老早就使用 Unicode 做為預設編碼,所以在轉換至 Unicode 環境後更是如魚得水,可以說是完全不會遇到 任何問題。 我們可以在 ~/.gtkrc-2.0 中指定 Gtk2+ Based 程式的預設字型,例:
gtk-font-name = "AR PL Kaitim Big5 14"
而 Gtk2+ Based 的程式最可怕的一點是,如果它在該字型中找不到相對應的文字,例:
映画 ジブリ [ 猫の恩返し ] 主題歌 風になる - つじあやの.ogg
這串文字,其中的「映」「恩」等字,是可以在 文鼎字型 裡找到相對應的字;但剩下的「画」「猫」等字就找不到了。但是 Gtk2+ 的函式庫會自動使用其它的字型來把這些字給補滿,所以在 Mozilla 裡還是可以看到完整的字串。真的非常了不起!
[編輯] VIM
VIM 則內建了方便的自動轉碼功能, 方法是在 ~/.vimrc 中加入:
" 設定自動轉換為 UTF-8 編碼 set fileencodings=utf-8,big5,euc-jp,gbk,euc-kr,utf-bom,iso8859-1 set encoding=utf8 set tenc=utf8
它會自動偵測該文字檔是否為 Big5 / eucJP 等編碼, 然後將其轉換為 UTF-8 編碼。 但是在存檔時仍會以原有編碼儲存; 如果能配合支援 UTF-8 的 X Terminal 那就更加完美了!
但如果在中文的 Console 下,如:zhcon, 我們仍有可能會在 Big5 環境下使用 VIM; 這時我們可以修改 ~/.vimrc:
" 使用 <F12> 來將文字編碼轉換成 Big5 map <F12> :set tenc=big5<cr>
這樣我們在必要時就可以按下 <F12>, 強迫 VIM 能在 zh_TW.Big5 的 Terminal 下運作。
註:筆者對 VIM Script 完全不熟,
本來是想,只要按下 <F12> 就能在各種 Locale 中切換;但寫不出來... -_-|||
[編輯] MS Windows 的網路芳鄰
修改 /etc/samba/smb.conf 如下:
display charset = UTF8 dos charset = CP950 unix charset = UTF8
並使用以下參數來掛載 MS Windows Server 之分享目錄:
mount -t smbfs -o username=*UserName*,codepage=cp950,iocharset=utf8 //FileServer/共用區 /mnt
就可以在 LinNeighborhood 及 smbclient 所掛載的目錄中使用 Unicode 編碼之檔案名稱及目錄了。 不過僅限於使用 Big5 編碼之 Unicode 檔名...
還有很多的程式,如 wxWidgets、Tcl/Tk 等等,由於接觸的不多,所以不清楚它們對 Unicode 的支援程度到底是如何。而這部份會儘快補完的!
![[Main Page]](/upload/4/49/Debian_taiwan_out.png)