簡而言之, Unicode 為一 ISO 國際標準,
它包含了世界各國的常用文字,目前已收錄有 8 萬(?) 個字以上。
它的目的是統一世界各國之編碼,讓世界文字萬碼奔騰的狀況不復出現。
註:UTF-8 為 Unicode 編碼方式之一,感謝 shogun1234 兄 指正!
為什麼要轉入 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-JPja_JP.UTF-8 UTF-8
zh_TW.UTF-8 UTF-8
EOF
# 執行 locale-gen 來產生這些 locales 資訊檔。
locale-gen
再設定好 Locale 的環境變數,
就可以改變現正所使用的 Locale。
您可以把這些環境變數寫在 ~/.bashrc、~/.xinitrc 或是 ~/.xsession 中,
以 ~/.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 LANG=zh_TW.UTF-8
export LC_ALL=zh_TW.UTF-8
# invoke global X session script
. /etc/X11/Xsession
在 Linux 上轉入 Unicode 環境時所帶來之挑戰及解決方案
檔案名稱編碼問題
檔案名稱的編碼影響到的將會是我們能否順利在 Linux 下看到正確的檔案名稱。
如果是 vfat 的磁碟區,
那麼內定就是使用 UTF-8 編碼來儲存檔名。
所以只要使用以下方式來掛載 vfat 磁區,就可以無痛將檔案名稱轉換為 UTF-8 編碼了:
(請將其寫在 /etc/fstab 裡)
- 代碼: 選擇全部
/dev/hda5 /FAT32 vfat utf8=1,gid=disk,fmask=113,dmask=002,umask=002 0 0
但,如果是 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 在加上一個 Patch 之後,就可以在 zh_TW.UTF-8 下運作了,
而幸運的是,這個 Patch 已被 Debian 官方所接受,
所以 Debian User 就不必費心去加 Patch 了。
但是它必須先於 zh_TW.Big5 下執行,才能將 Locale 轉換為 zh_TW.UTF-8。
以 ~/.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 環境下運作。
如果您有興趣則不妨試試看!
xlib based 程式:(xedit 等等)
只要指定讓 xlib based 程式使用 Unicode 字型,如:unifont,
應該就能讓 xlib based 程式在 Unicode 環境下運作。
例,在 ~/.Xdefaults 裡頭加入:
- 代碼: 選擇全部
xedit*international: True
xedit*fontSet: -gnu-unifont-medium-r-normal--16-160-75-75-c-80-iso10646-1
就能讓 xedit 支援 Unicode 了。
Gtk+ based 程式:(XMMS、GIMP 1.2 等等)
只要在 /etc/gtk/gtkrc.utf-8 中指定讓 Gtk+ based 程式使用 Unicode 字型,如:
- 代碼: 選擇全部
style "default-text" {
fontset = "-gnu-unifont-medium-r-normal--16-160-75-75-c-80-iso10646-1"
}
class "GtkWidget" style "default-text"
應該就能讓 xlib 程式在 Unicode 環境下順利運作。
但是 XMMS 將也會以 UTF-8 編碼來讀取 ID3 tag,所以反而會在 XMMS 視窗裡出現亂碼。
解決方案是把所有的 ID3 tag 轉換成 UTF-8 編碼,或是在播放時顯示檔案名稱。
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 那就更加完美了!
還有很多的程式,如 wxWidgets、Tcl/Tk 等等,
由於接觸的不多,所以不清楚它們對 Unicode 的支援程度到底是如何。
而這部份會儘快補完的!
本文也會同時放至 Debian Wiki 裡。請大家多多支持 Debian Wiki!