📄 readme.unicode
字号:
Emacs目前CVS版(版本号21.3.50)改进了内建的Unicode编码支持,提供了utf-translate-cjk-mode,不再需要Mule-UCS即可支持CJK字符的Unicode编码。但是utf-translate-cjk-mode仅支持GB2312范围内的中文字符,而且无法在Chinese-GBK环境下使用。要配合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)))现在你可以存取中文Unicode编码的文件。可以用“C-x RET f utf-8 RET”将当前缓冲区的编码改为utf-8然后保存,也可以用“C-x RET c utf-8 RET C-xC-s filename RET"在保存时转换文件格式。打开文件时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”的前缀。以下是一些背景资料和技术细节:[Unicode简介]Unicode是ISO-10646 UCS(Universal Character Set,世界通用字符集)的子集,由Unicode协会(http://www.unicode.org)。其编码空间为U+0000 - U+FFFF,最多可容纳65536个字符。截至4.0.0版为止共收录了4144种字符集。Unicode的标准可以在ftp://ftp.unicode.org处下载,最新版本为4.0.0(在编写这份文档时)Unicode只是一个字形和内码上的标准,并没有牵涉到具体的存储方式。为此Unicode协会还定义了一套存储Unicode编码的转换格式,称为UTF(Unicode/UCS Transformation Format,统一码/通用字符集转换格式),常用的有UTF-8和UTF-16。UTF-16是2字节的定长编码,按照字节序由分为UTF16-be(big endian)和UTF16-le(little endian)。UTF-8则是1-3字节的变长编码,其中1字节编码部分同ASCII码表完全符合。UTF-8的转换方式为: 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(统汉字)]Unicode最多只能编码65536个字符,根本无法容纳中日韩文字。针对这个问题,Unicode协会采用“中日韩文整合(CJK Unification)”的解决方案,把中日韩文中笔划相近的汉字,尽量以一个单码来代表。例如草字头在繁体中文中要算成四划(两个十字),在简体中文和日文中只有三划(一横两竖),Unicode就忽略这种微小差别,将两种草字头的字符整合为一个编码。这种经过“中日韩文整合”的汉字,在Unicode中称为“统汉字(Unihan)”。目前共有两万多个这样的统汉字。值得注意的是,一个统汉字对应多个字形,在中日韩文中可能有不同的表现。所以,要解析包含统汉字的Unicode文件,必须提供额外的信息,以决定其是以简体中文,繁体中文,日文还是韩文的字形出现。[Emacs-CVS对Unicode的支持]Emacs-CVS内建支持Unicode,但是,mule-utf-8等编码系统只支持以下的字符集: 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,将其动态地转换成相应字符集中的字符。要支持Unicode中的CJK字符,必须先打开utf-translate-cjk-mode,以加载转换表。但是这个表比较大(超过40000个条目),加载过程比较慢,所以默认是不打开这个minor mode的。[为什么需要修改utf-translate-cjk-mode]根据“中日韩文整合”方案,中日韩文的字符集的Unicode映射之间存在一定的重叠。为了支持统汉字,Emacs-CVS中的utf-translate-cjk-mode中会根据current-language-environment的不同使用不同的顺序加载各个字符集的替换表。如对于Chinese-GB,会按照subst-jis,subst-ksc,subst-big5,subst-gb2312的顺序加载替换表,这样简体中文会覆盖其它字符集的文字。但是这个utf-translate-cjk-mode不支持Mule-GBK,原因是:1.列表中没有Chinese-GBK这一语言环境2.默认会使用日文字符覆盖其它字符集的文字3.而且没有提供GBK范围内的替换表所以需要修改了utf-translate-cjk-mode的定义,使其可以支持GBK和Unicode之间的动态转换。[X-Selection的问题]Emacs默认要求COMPOUND_TEXT形式的X-Selection文本(这也是Mule-GBK的默认配置),但是我们在测试中发现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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -