X Windows汉化常见问题
蓝森林 http://www.lslnet.com 3月18日
18:46
于明俭
中科院高能物理所计算中心
Email:yumj@sun.ihep.ac.cn
声明
本FAQ的最新HTML版本可以在
http://fish.ihep.ac.cn/www/faq.html获得. 列出的某些软件可在
ftp://fish.ihep.ac.cn/下获得.
本FAQ是针对XWindows下的汉字处理和汉化问题编写的,
作者编写此FAQ的目的是使更多的人了解XWindows的
汉化问题.
作者并非汉化专家,
甚至谈不上这方面的专职程序员,
作者只是在该领域里进行了短时间的探索. 所以本FAQ
对有的问题解答很肤浅, 也有可能对某些问题的解答
不正确, 敬请原谅. 作者不对
使用本文所造成的后果负责.
本FAQ是开放型的, 如果您有什么问题, 建议, 解答
请发电子邮件给作者
, 作者会在下一版本更新.
总索引
- 有关汉字的基本知识
- X Font
- 汉字显示
- X Windows下软件的汉化
- 现有软件
汉字编码基本知识
GB与BIG5文件的识别
有关半个汉字问题
提出半个汉字的原因是有的软件在处理汉字不当时,显示了半个
汉字. 这是因为对汉字的编码不甚了解造成的.
请注意您所看到的
是汉字的图形显示的一半被削去了. 既如此,
同样也可以把显示
的汉字变成原来的1/4, 3.14/4...
对应于字符缓冲区,
实际上是原来的汉字的两个字节被删去一个
字节. 这样它就不可能再查找汉字字模,
所以清屏幕后再显示时
该字节后都是乱码.
那半个汉字能不能实现呢? 当然可以. 很遗憾的是,
您必须仍然
使用双字节来索引半个汉字,
因为单字符的索引范围最多为256,
抛去最高位为零的只剩128了. 既然这样, 何苦用半个汉字呢?
基于以上原因, 使用半个汉字也不能减少输入的麻烦,
相反您的
麻烦可能是原来的两倍.
汉字字体
- 怎样安装X Font?
字体安装有本机安装和服务器安装两种
- 获取字库后, 放在某目录如 ~/font下
- 使用mkfontdir ~/font 产生 font.dir
- 编制alias文件:font.alias
- 本机使用: xset fp+ ~/font
- 列出Font: xlsfonts
- 显示Font: xfd -fn fontname
- 使用新的alias时, 使用xset fp rehash
- 获取字库后, 放在某目录如 ~/font下
- 使用mkfontdir ~/font 产生 font.dir
- 编制alias文件:font.alias
- 编制font的配置(Configuration)文件, 如 fsconf1234,
其中含有端口号,目录等如,
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
- Font服务器启动: fs -cf fsconf1234 &
- Font客户使用: xset fp+ tcp/server_host_name:1234
- 列出Font: xlsfonts
- 显示Font: xfd -fn fontname
- 使用新的alias时, 使用xset fp rehash
- X Font现有哪些种格式?
X Font有很多种格式,
- bdf: 点阵格式, 用于直接访问或转换成其它格式
- pcf: X11R5
或更新版本
- snf: X11R4
或更早版本
- hbf: 汉字位图(bitmap)文件
- ttf: True Type
- 怎样转换字体?
- bdftopcf: 把bdf字库转换成pcf格式
- bdftosnf: 把bdf字库转换成snf格式
hbftobdf: ftp://ftp.ifcss.org/pub/software/info/HBF-1.1.tar.gz
: 把hbf字库转换成bdf字库
ttf2bmp: ftp://ftp.ifcss.org/pub/software/fonts/utils/ttf2bmp.zip
: 把True Type转换成Bitmap
hbf2fnt: ftp://ftp.ifcss.org/pub/software/fonts/utils/HBF2FNT1.ZIP
: 把hbf转换成MS Windows
Font
有哪些软件可以编辑X汉字字体?
有许多商业和免费软件可以编辑修改XFont, 如
什么是Scalable字体?
Scalable(可缩放)字体实际上是把现有字体装入时的字体缩放
机制. X字体共有十四个域(field),
如
-cclib-fangsong-medium-r-normal-jiantizi-24-240-75-75-c-240-gb2312.1980-0
为仿宋简体24点阵. 如果使其缩放,
则可以把第七和第十二域置为"*",
把第八域设置为字体的大小. 如放大为36点阵,
-cclib-fangsong-medium-r-normal-jiantizi-*-360-75-75-c-*-gb2312.1980-0
请尝试用xfd检查.
矢量字体
了解不多
汉字的显示
- 如何实现汉字和ASCII的混合显示?
编写的程序把汉字与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下的汉化
- 有汉化的X
Server吗?
CX-Window
这个是经过国人改写的 X-Window
Server。可以让您的 X-Window
直接显示中文。
但是目前只能显示中文,并无法提供您在各种应用软体中输入中文。
[作者按:希望改动X
Server来汉化输入是很困难的.
这需要改动X
Server
的事件(XEvent)分配(Dispatch). 即使如此,
有些软件还是不可能支持
汉字输入]
- X
窗口管理器的汉化是否容易?
一个容易误解的问题是,
很多人把窗口的标题认为是所运行的应用软件的一
部分. 所以提出"netscape的标题为什么不能显示中文?"等类似问题.
其实,
窗口的标题是属于窗口管理器的显示部分.
窗口管理器是特殊的窗口,
它把所有的新窗口作为自己的子窗口. 但实际上,
它又是与普通窗口具有同样权限的窗口. 所以汉化窗口管理器的显示是很
容易的. 窗口管理器的汉化内容主要包括窗口标题(Title)的显示(或翻移/
过滤后显示), 按钮条(Toolbar)和菜单(Menu)的显示,
工具内容的显示等等.
fvwm95是较好的窗口管理器之一, 它的汉化版本可以从
这里取得.
- 没有源程序时如何汉化?
除非特别需要, 不要去改动可执行代码使其显示汉字.
如果软件是采用动态连接的(Dynamic Link),
可以改动动态连接库(一般为
.so), 当然程序员必须熟悉如何替换库中的函数,
甚至替换标准库函数.
此类方法成功的可能性很小.
"包装"技术是新兴的汉化技术之一.它采用了对字符串显示的
处理, 对键盘事件的截取等,
从而可以使应用软件正确地显示和
输入汉字. 如可以使普通的XTERM, netscape, Xform...等软件
显示和输入汉字.
如果软件是静态连接的(Static Link),
则只能改动可执行文件了.
如果该软件支持汉字显示, 或通过"包装"后可以显示汉字,
可以试一下编辑该软件(用vi或一些hexedit软件), 改动其中较
明显的字符串为汉字, 如"File" --> "文件".此乃下策,
它仅仅
使软件中的菜单标题等变成汉字.
- 有源程序时的如何汉化?
有源程序时汉化比较容易,
程序员要做的事有两件(1)汉字或汉字和ASCII
的混合码的显示(2)汉字输入.
原软件需要改动的地方一般有
- 混合显示, 必须使用新的函数取代原来的 XDrawString和XDrawImageString.
- 窗口尺寸计算, 必须使用新的函数取代原来的 XTextWidth
- 编码探测, 使用普通手法或unicode判断汉字和汉字的第一或第二字节
- 窗口事件的重处理, 把功能键和输入键码分开,
输入键码作汉字转换
- 汉字接收处理
- 还要处理Font, GC等
- 如何解决汉字输入问题?
X-Windows最初的设计并没有考虑到汉字的输入问题.
所谓汉字输入实际上
是把您输入的键码(KeyCode)发送到一个用于转换的软件,该软件依据一定的
转换方法(即输入法)转成汉字码, 然后发送到该键码的Window中,
或把
汉字码存储到Cut缓冲区内, 由用户获取.
所以汉字输入问题是十分棘手的问题.
首先它需要软件支持汉字显示, 如果显示
不正确,输入的内容出了问题无从查找.
其次它需要软件支持汉字输入, 如果
软件禁止8-bit的字符输入, 也不可能实现汉字输入.
鉴于以上两点, 一般来
说, 软件在制作时就应考虑汉字的显示与输入问题.
通过重定义键盘, 使键盘按下后可以产生完整的Latin-1字符集,
则可以有效地避开某些软件对键盘的处理(XLookupString()).
关于如何定义键盘可以参考xkeycaps-2.38.tar.gz,
软件Chinput-1.3则正是利用该方法
实现汉字输入.
如果上述两个条件都满足, 一般地, 我们可以用Cut/Paste的方法输入汉字.
否则, 则必须依据问题使用其它方法.
- 有汉化的Java吗?
使用"包装"后的netscape, 可以直接使用GB,BIG5等编码而显示和
输入汉字.
- 清华大学计算机系的田金兰,吕思飞,徐伟生对Hotjava浏览器和Java语言
进行了汉化(结果未知).
汉化后的功能支持
- 完全支持原有英文版的各种功能。在处理英文文档时,所提供的功
能与英文版HotJava完全相同;
- 增加中文信息处理功能,包括:
- 输出功能。能输出包括GB和BIG5编码在内的任何中文信息。这些
信息可能是HTML或其它文档的内容,也可能是Java
Applet 的输
出。至于需要输出的中文信息的界面元素。如Menu、Button、
Frame等,也提供相应的输出功能。
- 打印功能。能打印含有中文信息(GB或BIG5编码)的文档。
- 输出功能。提供对通用输入方法(GB:拼音、内码、五笔字型等,
BIG5:仓颉、倚天注音等)的支持,支持TextField和TextArea
内的汉字编辑。
- 使用Java显示汉字:
http://www.ocrat.com/ocrat/reaj/
- 中文Java计划:
http://www.digiorbit.com/~tzhang/java/project.html
汉化工具和已汉化的软件包
- 有哪些汉字输入软件?
Chinput: http://yumj.kek.jp/www/chinput.html
Chinput是基于CXterm的汉字输入服务器. 使用它,
使程序员可以很容易
地汉化X-Windows下的软件,
使其支持汉字输入. 它除了具有CXterm的所
有输入方法外, 还具有良好的用户界面, 编程API等,
目前可以使用Chinput
的软件有Tcl/Tk系列软件, EZWGL(X-Window下的汉化编程工具,
编程方便,
功能齐全).
经过"包装"的Chinput-1.3则可以全面支持X窗口的汉字输入和显示.
- 北京大学的汉字输入服务器软件.
未见源代码和可执行代码公开.
- cWnn+Kinput
了解不多.
我想编制可以使用汉字的窗口软件,有汉化的Widget软件吗?
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取得汉化版本及有关信息.
听说Tcl/Tk是不错的软件包, 它能使用汉字吗?
如何在Netscape显示与输入汉字?
使用经过包装的Chinput或XCIN, 可以在Netscape中输入和显示
中文. 其中显示中文包括按钮, Mail和News标题等.
如何在email中使用汉字?
- 使用"包装"后的软件
- CXterm+celm: 汉化的elm,
著名的电子邮件软件
- CXterm+cpine: 汉化的pine,
著名的电子邮件软件
如何在IRC中使用汉字?
如何把汉字转化成图形?
汉字转化成图形, 要求用户能访问点阵或矢量字库,
并且即时生成图象.
即时生成图象的软件有
GD: http://www.boutell.com/gd/
和它的变种.
摘自:蓝森林linux
|