Main Page | 最近更改 | 編輯本頁 | 頁面歷史

可列印版 | 免責聲明 | 隱私政策

未登入
登入 | 幫助
 

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 中,

以 ~/.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

如果是 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 的支援程度到底是如何。而這部份會儘快補完的!

取自"http://wiki.debian.org.tw/index.php/Unicode"

本頁面已經被瀏覽31,996次。 這頁的最後修訂在 2005年8月11日 (星期四) 22:31。 本站的全部文本內容在GNU Free Documentation License 1.2之條款下提供。


[Main Page]
Main Page
社區
近期活動
最近更改
隨機頁面
幫助
贊助

編輯本頁
討論本頁
頁面歷史
鏈入頁面
鏈出更改

特殊頁面
錯誤報告