| 声明 |
本FAQ的最新HTML版本可以在 http://fish.ihep.ac.cn/www/faq.html获得. 列出的某些软件可在 ftp://fish.ihep.ac.cn/下获得.
本FAQ是针对XWindows下的汉字处理和汉化问题编写的, 作者编写此FAQ的目的是使更多的人了解XWindows的 汉化问题.
作者并非汉化专家, 甚至谈不上这方面的专职程序员, 作者只是在该领域里进行了短时间的探索. 所以本FAQ 对有的问题解答很肤浅, 也有可能对某些问题的解答 不正确, 敬请原谅. 作者不对 使用本文所造成的后果负责.
本FAQ是开放型的, 如果您有什么问题, 建议, 解答 请发电子邮件给作者 , 作者会在下一版本更新.
| 总索引 |
| 汉字编码基本知识 |
汉字GB和BIG5都为双字节编码, GB编码的第一字节在0xa1到0xf7之间, 第二字节在0xa1到0xfe之间. BIG5编码的第一字节在0xa1到0xf9之间, 第二字节有两个区域, 第一区域在0x40和0x7e之间, 第二区域在 0xa1和0xfe之间.(注意第二字节的高位可能是零)
| 汉字字体 |
字体安装有本机安装和服务器安装两种
port = 1234 clone-self = on client-limit = 10 catalogue = /usr/local/font,/home/yumj/hzfont default-point-size = 120 default-resolutions = 100,100,75,75
X Font有很多种格式,
有许多商业和免费软件可以编辑修改XFont, 如
| 汉字的显示 |
编写的程序把汉字与ASCII分开, 然后逐段处理, 普通字符串的显示 用XDrawString或XDrawImageString, 汉字的显示用XDrawString16 或XDrawImageString16.
能够区分的汉字常用编码中, BIG5与GB不同, BIG5编码的第二个 字节的高位有可能为零.
这是所有字体显示都会遇到的问题.
在X Windows下不能直接有角度地显示字符串. 但是可以通过先写缓冲区,
当然最好是看不见的(Not Mapped)窗口的pixmap,
然后再从缓冲区中取像素转换, 此方法相当于图象处理. 使用此方法,
可以实现汉字的任意角度旋转和任意尺寸的放大/缩小.
如果您有幸装了X11R6, 它本身有设置字体的转换矩阵的功能. 请参考X
手册的X逻辑字体描述(X Logical Font Description)一节.
如果您使用X11R5并且可以使用X11R6的字体, 也可以使用
转换矩阵的方法.
软件
xvertext-5.0-ss-9.01.tar.gz是较好的处理字体旋转的
软件, 但在应用于汉字时须作稍微改动.
这是所有字体显示都会遇到的问题.
特殊效果如突起, 凹下等都可以通过以不同的颜色,粗细等方式
错位地重写字符串来实现.注意重写时用XDrawImageString16,
并使用不同的GC来写汉字(GC中的很多项都影响到汉字显示).
| X Windows下的汉化 |
CX-Window 这个是经过国人改写的 X-Window Server。可以让您的 X-Window 直接显示中文。 但是目前只能显示中文,并无法提供您在各种应用软体中输入中文。
[作者按:希望改动X Server来汉化输入是很困难的. 这需要改动X Server 的事件(XEvent)分配(Dispatch). 即使如此, 有些软件还是不可能支持 汉字输入]
一个容易误解的问题是, 很多人把窗口的标题认为是所运行的应用软件的一
部分. 所以提出"netscape的标题为什么不能显示中文?"等类似问题. 其实,
窗口的标题是属于窗口管理器的显示部分.
窗口管理器是特殊的窗口, 它把所有的新窗口作为自己的子窗口. 但实际上,
它又是与普通窗口具有同样权限的窗口. 所以汉化窗口管理器的显示是很
容易的. 窗口管理器的汉化内容主要包括窗口标题(Title)的显示(或翻移/
过滤后显示), 按钮条(Toolbar)和菜单(Menu)的显示, 工具内容的显示等等.
fvwm95是较好的窗口管理器之一, 它的汉化版本可以从
这里取得.
除非特别需要, 不要去改动可执行代码使其显示汉字.
如果软件是采用动态连接的(Dynamic Link), 可以改动动态连接库(一般为
.so), 当然程序员必须熟悉如何替换库中的函数, 甚至替换标准库函数.
此类方法成功的可能性很小.
"包装"技术是新兴的汉化技术之一.它采用了对字符串显示的
处理, 对键盘事件的截取等, 从而可以使应用软件正确地显示和
输入汉字. 如可以使普通的XTERM, netscape, Xform...等软件
显示和输入汉字.
如果软件是静态连接的(Static Link), 则只能改动可执行文件了.
如果该软件支持汉字显示, 或通过"包装"后可以显示汉字,
可以试一下编辑该软件(用vi或一些hexedit软件), 改动其中较
明显的字符串为汉字, 如"File" --> "文件".此乃下策, 它仅仅
使软件中的菜单标题等变成汉字.
有源程序时汉化比较容易, 程序员要做的事有两件(1)汉字或汉字和ASCII
的混合码的显示(2)汉字输入.
原软件需要改动的地方一般有
X-Windows最初的设计并没有考虑到汉字的输入问题. 所谓汉字输入实际上
是把您输入的键码(KeyCode)发送到一个用于转换的软件,该软件依据一定的
转换方法(即输入法)转成汉字码, 然后发送到该键码的Window中, 或把
汉字码存储到Cut缓冲区内, 由用户获取.
所以汉字输入问题是十分棘手的问题. 首先它需要软件支持汉字显示, 如果显示
不正确,输入的内容出了问题无从查找. 其次它需要软件支持汉字输入, 如果
软件禁止8-bit的字符输入, 也不可能实现汉字输入. 鉴于以上两点, 一般来
说, 软件在制作时就应考虑汉字的显示与输入问题.
通过重定义键盘, 使键盘按下后可以产生完整的Latin-1字符集,
则可以有效地避开某些软件对键盘的处理(XLookupString()).
关于如何定义键盘可以参考xkeycaps-2.38.tar.gz, 软件Chinput-1.3则正是利用该方法
实现汉字输入.
如果上述两个条件都满足, 一般地, 我们可以用Cut/Paste的方法输入汉字.
否则, 则必须依据问题使用其它方法.
使用"包装"后的netscape, 可以直接使用GB,BIG5等编码而显示和
输入汉字.
| 汉化工具和已汉化的软件包 |
汉字输入编辑的最常用软件
xcin 是在 X-Window 模式下执行的中文输入系统, 因为 xcin 是利用 X-Window 的 Server/ Client方式执行的,所以您只要启动一个 xcin 输入视窗,便可以对应许多的 crvxt 显示虚拟终端机,占用系统资源比较小。也提供类似 DOS 环境下的忘形或自然输入 法的智慧型输入选字环境。目前 xcin+crxvt 需配合倚天中文系统,制作字型与输入 法。
Chinput是基于CXterm的汉字输入服务器. 使用它, 使程序员可以很容易 地汉化X-Windows下的软件, 使其支持汉字输入. 它除了具有CXterm的所 有输入方法外, 还具有良好的用户界面, 编程API等, 目前可以使用Chinput 的软件有Tcl/Tk系列软件, EZWGL(X-Window下的汉化编程工具, 编程方便, 功能齐全).
经过"包装"的Chinput-1.3则可以全面支持X窗口的汉字输入和显示.
了解不多.
EZWGL-1.24-chinese.tar.gz
是第一个汉化的窗口编程Widget软件.
EZWGL 是由德克萨斯大学的 Maorong Zou先生创建的一套X窗口下的Widgets, 它
以 编程方便,功能齐全而深受用户的喜爱. 尤其是它的三维 画板(3D Canvas)Widget
更是所有Widgets中唯一具有的 功能. 其组件有, 标签(Label,FreeLabel,NWLabel),
边框(Frame),
按钮(Button, Check Button, Radio Button, MenuButton), 菜单(Menu, SubMenu),
滚动条(Slider),图标(Icon),输入区(Entry, optEntry),列表(ListBox),
文本区(Text), 笔记本(Notebook), 缩放条(PaneHandle), 三维画板(3D Canvas),
文件选择器(FileSelector), 执行器(Executor), 树状列表(ListTree),
高级列表(FancyListBox), 工作区(WorkArea).
用户可以从
http://rene.ma.utexas.edu/~mzou/EZWGL/取得原软件.
本文作者对EZWGL进行了全面汉化, 汉化后的软件支持GB, BIG5, Japanese EUC,
和Korea EUC. 支持汉字和ASCII的混合显示, 支持输入区和文本区的汉字
输入和混合编辑. 您可以从
http://yumj.kek.jp/www/ezwgl.html取得汉化版本及有关信息.
使用经过包装的Chinput或XCIN, 可以在Netscape中输入和显示
中文. 其中显示中文包括按钮, Mail和News标题等.
汉字转化成图形, 要求用户能访问点阵或矢量字库, 并且即时生成图象.
即时生成图象的软件有
GD: http://www.boutell.com/gd/
和它的变种.
支持GB, BIG5到GIF的转换, 支持多种字体和字型号.
同时用户可以选择HTML标签的去除,
页面规格,如行列,边界宽度等等.