?? readme.unicode
字號:
Emacs目前CVS版(版本號21.3.50)改進(jìn)了內(nèi)建的Unicode編碼支持,提供了utf-translate-cjk-mode,不再需要Mule-UCS即可支持CJK字符的Unicode編碼。但是utf-translate-cjk-mode僅支持GB2312范圍內(nèi)的中文字符,而且無法在Chinese-GBK環(huán)境下使用。要配合Mule-GBK使用這一功能,還需要做一些工作:1. 安裝Mule-GBK,請參見README文件2. 把下面幾行添加到你的Emacs的init file(缺省的是$HOME/.emacs)中去: ;;; Unicode support, for Emacs CVS (21.3.50) only (when (fboundp 'utf-translate-cjk-mode) ;; Load modified utf-translate-cjk-mode (require 'gbk-utf-mode) ;; Turn on utf-translate-cjk-mode (utf-translate-cjk-mode 1) ;; Setup X selection for unicode encoding (setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING)))現(xiàn)在你可以存取中文Unicode編碼的文件。可以用“C-x RET f utf-8 RET”將當(dāng)前緩沖區(qū)的編碼改為utf-8然后保存,也可以用“C-x RET c utf-8 RET C-xC-s filename RET"在保存時轉(zhuǎn)換文件格式。打開文件時Emacs會自動判斷編碼,如果打開utf-8編碼的文件時判斷的不對,可以用“C-x RET r utf-8 RET”重新以utf-8編碼加載文件,或是在“C-x C-f”或“C-x C-v”命令前加上“C-x RET cutf-8 RET”的前綴。以下是一些背景資料和技術(shù)細(xì)節(jié):[Unicode簡介]Unicode是ISO-10646 UCS(Universal Character Set,世界通用字符集)的子集,由Unicode協(xié)會(http://www.unicode.org)。其編碼空間為U+0000 - U+FFFF,最多可容納65536個字符。截至4.0.0版為止共收錄了4144種字符集。Unicode的標(biāo)準(zhǔn)可以在ftp://ftp.unicode.org處下載,最新版本為4.0.0(在編寫這份文檔時)Unicode只是一個字形和內(nèi)碼上的標(biāo)準(zhǔn),并沒有牽涉到具體的存儲方式。為此Unicode協(xié)會還定義了一套存儲Unicode編碼的轉(zhuǎn)換格式,稱為UTF(Unicode/UCS Transformation Format,統(tǒng)一碼/通用字符集轉(zhuǎn)換格式),常用的有UTF-8和UTF-16。UTF-16是2字節(jié)的定長編碼,按照字節(jié)序由分為UTF16-be(big endian)和UTF16-le(little endian)。UTF-8則是1-3字節(jié)的變長編碼,其中1字節(jié)編碼部分同ASCII碼表完全符合。UTF-8的轉(zhuǎn)換方式為: U+0000~U+007F (1 byte) 0 + 7bits U+0080~U+07FF (2 bytes) 110 + 5bits, 10 + 6bits U+0800~U+FFFF (3 bytes) 1110 + 4bits, 10 + 6bits, 10+ 6bits[Unihan(統(tǒng)漢字)]Unicode最多只能編碼65536個字符,根本無法容納中日韓文字。針對這個問題,Unicode協(xié)會采用“中日韓文整合(CJK Unification)”的解決方案,把中日韓文中筆劃相近的漢字,盡量以一個單碼來代表。例如草字頭在繁體中文中要算成四劃(兩個十字),在簡體中文和日文中只有三劃(一橫兩豎),Unicode就忽略這種微小差別,將兩種草字頭的字符整合為一個編碼。這種經(jīng)過“中日韓文整合”的漢字,在Unicode中稱為“統(tǒng)漢字(Unihan)”。目前共有兩萬多個這樣的統(tǒng)漢字。值得注意的是,一個統(tǒng)漢字對應(yīng)多個字形,在中日韓文中可能有不同的表現(xiàn)。所以,要解析包含統(tǒng)漢字的Unicode文件,必須提供額外的信息,以決定其是以簡體中文,繁體中文,日文還是韓文的字形出現(xiàn)。[Emacs-CVS對Unicode的支持]Emacs-CVS內(nèi)建支持Unicode,但是,mule-utf-8等編碼系統(tǒng)只支持以下的字符集: ascii eight-bit-control latin-iso8859-1 mule-unicode-0100-24ff mule-unicode-2500-33ff mule-unicode-e000-ffff對于使用分布在U+3400 - U+DFFF中的CJK字符,Emacs需要通過utf-translation-table-for-encode這個translation table,以及utf-subst-table-for-decode和utf-subst-table-for-encode這兩個hashtable,將其動態(tài)地轉(zhuǎn)換成相應(yīng)字符集中的字符。要支持Unicode中的CJK字符,必須先打開utf-translate-cjk-mode,以加載轉(zhuǎn)換表。但是這個表比較大(超過40000個條目),加載過程比較慢,所以默認(rèn)是不打開這個minor mode的。[為什么需要修改utf-translate-cjk-mode]根據(jù)“中日韓文整合”方案,中日韓文的字符集的Unicode映射之間存在一定的重疊。為了支持統(tǒng)漢字,Emacs-CVS中的utf-translate-cjk-mode中會根據(jù)current-language-environment的不同使用不同的順序加載各個字符集的替換表。如對于Chinese-GB,會按照subst-jis,subst-ksc,subst-big5,subst-gb2312的順序加載替換表,這樣簡體中文會覆蓋其它字符集的文字。但是這個utf-translate-cjk-mode不支持Mule-GBK,原因是:1.列表中沒有Chinese-GBK這一語言環(huán)境2.默認(rèn)會使用日文字符覆蓋其它字符集的文字3.而且沒有提供GBK范圍內(nèi)的替換表所以需要修改了utf-translate-cjk-mode的定義,使其可以支持GBK和Unicode之間的動態(tài)轉(zhuǎn)換。[X-Selection的問題]Emacs默認(rèn)要求COMPOUND_TEXT形式的X-Selection文本(這也是Mule-GBK的默認(rèn)配置),但是我們在測試中發(fā)現(xiàn)mlterm(還有其它一些程序)使用的是UTF-8編碼的X-Selection文本。因此,要在Emacs-CVS中支持這些程序的中文拷貝粘貼,必須先打開utf-translate-cjk-mode,然后在Emacs的init文件中加入: (setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING))這樣Emacs會先考慮使用UTF-8來編碼。詹劍 <zhanjian@ustc.edu>2004.06.09
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -