Linux 版 (精华区)
发信人: jun (☆子夜☆), 信区: Linux
标 题: [转载] X-Windows 下汉化的常见问题解答(V001) (转载)
发信站: 紫 丁 香 (Tue Jan 12 10:46:25 1999), 站内信件
【 以下文字转载自 cnlinux 讨论区 】
【 原文由 jun 所发表 】
发信人: zhouquan (haha), 信区: Linux
发信站: BBS 水木清华站 (Mon Nov 23 15:09:17 1998)
X-Windows 下汉化的常见问题解答(V001)
于明俭
中科院高能物理所计算中心
Email:yumj@sun.ihep.ac.cn
声明
本FAQ的最新HTML版本可以在 http://yumj.kek.jp/www/faq.html获得. 列出的某些软
件可在 http://yumj.kek.jp/下获得.
本FAQ是针对XWindows下的汉字处理和汉化问题编写的, 作者编写此FAQ的目的是使更多
的人了解XWindows的 汉化问题.
作者并非汉化专家, 甚至谈不上这方面的专职程序员, 作者只是在该领域里进行了短时
间的探索. 所以本FAQ 对有的问题解答很肤浅, 也有可能对某些问题的解答 不正确,
敬请原谅. 作者不对 使用本文所造成的后果负责.
本FAQ是开放型的, 如果您有什么问题, 建议, 解答 请发电子邮件给作者 , 作者会在
下一版本更新.
总索引
* 有关汉字的基本知识
o 汉字编码
o 汉字编码间的转换
o GB与BIG5的识别
o 有关半个汉字问题
* X Font
o 怎样安装 X Font?
o X Font现有哪些种格式?
o 怎样转换字体?
o 汉字字体的编辑
o 有哪些软件可以编辑X汉字字体?
* 汉字显示
o 如何实现汉字和ASCII的混合显示?
o 怎样竖向或有角度地显示汉字?
o 如何实现特殊效果的汉字显示?
* X Windows下软件的汉化
o 有汉化的X Server吗?
o X 窗口管理器的汉化是否容易?
o 没有源程序时如何汉化?
o 有源程序时如何汉化?
o 如何解决汉字输入问题?
o 有汉化的Java吗?
* 现有软件
o 现有的汉字编辑软件
o 现有的汉字处理软件
o 有哪些汉字输入软件?
o 我想编制可以使用汉字的窗口软件, 有汉化的Widget软件吗?
o 听说Tcl/Tk是不错的软件包, 它能使用汉字吗?
o 如何在Netscape显示与输入汉字?
o 如何在email中使用汉字?
o 如何在news中使用汉字?
o 如何在IRC中使用汉字?
o 图形与汉字
汉字编码基本知识
* 汉字编码
汉字GB和BIG5都为双字节编码, GB编码的第一字节在0xa1到0xf7之间, 第二字节
在0xa1到0xfe之间. BIG5编码的第一字节在0xa1到0xf9之间, 第二字节有两个区
域, 第一区域在0x40和0x7e之间, 第二区域在 0xa1和0xfe之间.(注意第二字节的
高位可能是零)
* 汉字编码间的转换
o 国标与big5之间的转换
o 国标与HZ之间的转换
* GB与BIG5文件的识别
o 单字统计方法, 该方法按汉字出现的频度设置权重, 然后对应文件按字识别
o 词组统计方法, 该方法按汉字词组出现的频度设置权重, 然后对应文件按字
识别
o 字节统计方法, 该方法统计汉字的第二或第一字节, 取平均值和184比较
* 有关半个汉字问题
提出半个汉字的原因是有的软件在处理汉字不当时,显示了半个 汉字. 这是因为
对汉字的编码不甚了解造成的. 请注意您所看到的 是汉字的图形显示的一半被削
去了. 既如此, 同样也可以把显示 的汉字变成原来的1/4, 3.14/4...
对应于字符缓冲区, 实际上是原来的汉字的两个字节被删去一个 字节. 这样它就
不可能再查找汉字字模, 所以清屏幕后再显示时 该字节后都是乱码.
那半个汉字能不能实现呢? 当然可以. 很遗憾的是, 您必须仍然 使用双字节来索
引半个汉字, 因为单字符的索引范围最多为256, 抛区最高位为零的只剩128了.
既然这样, 何苦用半个汉字呢? 基于以上原因, 使用半个汉字也不能减少输入的
麻烦, 相反您的 麻烦可能是原来的两倍.
汉字字体
* 怎样安装X Font?
字体安装有本机安装和服务器安装两种
1. 获取字库后, 放在某目录如 ~/font下
2. 使用mkfontdir ~/font 产生 font.dir
3. 编制alias文件:font.alias
4. 本机使用: xset fp+ ~/font
5. 列出Font: xlsfonts
6. 显示Font: xfd -fn fontname
7. 使用新的alias时, 使用xset fp rehash
-----------------------------------------------------------------------
1. 获取字库后, 放在某目录如 ~/font下
2. 使用mkfontdir ~/font 产生 font.dir
3. 编制alias文件:font.alias
4. 编制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
5. Font服务器启动: fs -cf fsconf1234 &
6. Font客户使用: xset fp+ tcp/server_host_name:1234
7. 列出Font: xlsfonts
8. 显示Font: xfd -fn fontname
9. 使用新的alias时, 使用xset fp rehash
* X Font现有哪些种格式?
X Font有很多种格式,
o bdf: 点阵格式, 用于直接访问或转换成其它格式
o pcf: X11R5 或更新版本
o snf: X11R4 或更早版本
o hbf: 汉字位图(bitmap)文件
o ttf: True Type
o Vector Font
* 怎样转换字体?
o bdftopcf: 把bdf字库转换成pcf格式
o bdftosnf: 把bdf字库转换成snf格式
o hbftobdf: 把hbf字库转换成bdf字库
o ttf2bmp: 把True Type转换成Bitmap
o hbf2fnt: 把hbf转换成MS Windows Font
* 有哪些软件可以编辑X汉字字体?
有许多商业和免费软件可以编辑修改XFont, 如
o ftp://crl.nmsu.edu/CLR/multiling/General/xmbdfed.tar.gz
* 矢量字体
了解不多
汉字的显示
* 如何实现汉字和ASCII的混合显示?
编写的程序把汉字与ASCII分开, 然后逐段处理, 普通字符串的显示 用
XDrawString或XDrawImageString, 汉字的显示用XDrawString16
或XDrawImageString16.
能够区分的汉字常用编码中, BIG5与GB不同, BIG5编码的第二个 字节的高位有可
能为零.
* 怎样竖向或有角度地显示汉字?
这是所有字体显示都会遇到的问题.
在X Windows下不能直接有角度地显示字符串. 但是可以通过先写缓冲区, 当然最
好是看不见的(Not Mapped)窗口的pixmap, 然后再从缓冲区中取像素转换, 此方
法相当于图象处理. 使用此方法, 可以实现汉字的任意角度旋转和任意尺寸的放
大/缩小.
如果您有幸装了X11R6, 它本身有设置字体的转换矩阵的功能. 请参考X 手册的X
逻辑字体描述(X Logical Font Description)一节. 如果您使用X11R5并且可以使
用X11R6的字体, 也可以使用 转换矩阵的方法.
* 如何实现特殊效果的汉字显示?
这是所有字体显示都会遇到的问题.
特殊效果如突起, 凹下等都可以通过以不同的颜色,粗细等方式 错位地重写字符
串来实现.注意重写时用XDrawImageString16, 并使用不同的GC来写汉字(GC中的
很多项都影响到汉字显示).
X Windows下的汉化
* 有汉化的X Server吗?
CX-Window 这个是经过国人改写的 X-Window Server。可以让您的 X-Window 直
接显示中文。 但是目前只能显示中文,并无法提供您在各种应用软体中输入中
文。
[作者按:希望改动X Server来汉化输入是很困难的. 这需要改动X Server 的事件
(XEvent)分配(Dispatch). 即使如此, 有些软件还是不可能支持 汉字输入]
* X 窗口管理器的汉化是否容易?
窗口管理器是特殊的窗口, 它把所有的新窗口作为自己的子窗口. 但实际上, 它
又是与普通窗口具有同样权限的窗口. 所以汉化窗口管理器的显示是很 容易的.
窗口管理器的汉化内容主要包括窗口标题(Title)的显示(或翻移/ 过滤后显示),
按钮条(Toolbar)和菜单(Menu)的显示, 工具内容的显示等等.
[作者按: fvwm95是较好的窗口管理器之一, 有兴趣的读者可以尝试去 汉化它]
* 没有源程序时如何汉化?
除非特别需要, 不要去改动可执行代码使其显示汉字.
如果软件是采用动态连接的(Dynamic Link), 可以改动动态连接库(一般为 .so),
当然程序员必须熟悉如何替换库中的函数, 甚至替换标准库函数. 此类方法成功
的可能性很小.
如果软件是静态连接的(Static Link), 则只能改动可执行文件了. 如果该软件支
持汉字显示, 可以试一下编辑该软件, 改动其中较 明显的字符串为汉字,
如"File" --> "文件".此乃下策.
* 有源程序时的如何汉化?
有源程序时汉化比较容易, 程序员要做的事有两件(1)汉字或汉字和ASCII 的混合
码的显示(2)汉字输入.
原软件需要改动的地方一般有
o 混合显示, 必须使用新的函数取代原来的 XDrawString和
XDrawImageString.
o 窗口尺寸计算, 必须使用新的函数取代原来的 XTextWidth
o 编码探测, 使用普通手法或unicode判断汉字和汉字的第一或第二字节
o 窗口事件的重处理, 把功能键和输入键码分开, 输入键码作汉字转换
o 汉字接收处理
o 还要处理Font, GC等
* 如何解决汉字输入问题?
X-Windows最初的设计并没有考虑到汉字的输入问题. 所谓汉字输入实际上 是把
您输入的键码(KeyCode)发送到一个用于转换的软件,该软件依据一定的 转换方法
(即输入法)转成汉字码, 然后发送到该键码的Window中, 或把 汉字码存储到Cut
缓冲区内, 由用户获取.
所以汉字输入问题是十分棘手的问题. 首先它需要软件支持汉字显示, 如果显示
不正确,输入的内容出了问题无从查找. 其次它需要软件支持汉字输入, 如果 软
件禁止8-bit的字符输入, 也不可能实现汉字输入. 鉴于以上两点, 一般来 说,
软件在制作时就应考虑汉字的显示与输入问题.
如果上述两个条件都满足, 一般地, 我们可以用Cut/Paste的方法输入汉字. 否
则, 则必须依据问题使用其它方法.
* 有汉化的Java吗?
o 清华大学计算机系的田金兰,吕思飞,徐伟生对Hotjava浏览器和Java语言 进
行了汉化(结果未知). 汉化后的功能支持
+ 完全支持原有英文版的各种功能。在处理英文文档时,所提供的功 能
与英文版HotJava完全相同;
+ 增加中文信息处理功能,包括:
1. 输出功能。能输出包括GB和BIG5编码在内的任何中文信息。这些
信息可能是HTML或其它文档的内容,也可能是Java Applet 的输
出。至于需要输出的中文信息的界面元素。如Menu、Button、
Frame等,也提供相应的输出功能。
2. 打印功能。能打印含有中文信息(GB或BIG5编码)的文档。
3. 输出功能。提供对通用输入方法(GB:拼音、内码、五笔字型
等, BIG5:仓颉、倚天注音等)的支持,支持TextField和
TextArea 内的汉字编辑。
o 使用Java显示汉字: http://www.ocrat.com/ocrat/reaj/
o 中文Java计划: http://www.digiorbit.com/~tzhang/java/project.html
汉化工具和已汉化的软件包
* 有哪些汉字输入软件?
o CXterm+vi(...)
汉字输入编辑的最常用软件
o xcin
xcin 是在 X-Window 模式下执行的中文输入系统, 因为 xcin 是利用
X-Window 的 Server/ Client方式执行的,所以您只要启动一个 xcin 输入
视窗,便可以对应许多的 crvxt 显示虚拟终端机,占用系统资源比较小。
也提供类似 DOS 环境下的忘形或自然输入 法的智慧型输入选字环境。目前
xcin+crxvt 需配合倚天中文系统,制作字型与输入 法。
o Chinput
Chinput是基于CXterm的汉字输入服务器. 使用它, 使程序员可以很容易 地
汉化X-Windows下的软件, 使其支持汉字输入. 它除了具有CXterm的所 有输
入方法外, 还具有良好的用户界面, 编程API等, 目前可以使用Chinput 的
软件有Tcl/Tk系列软件, EZWGL(X-Window下的汉化编程工具, 编程方便, 功
能齐全)
o 北京大学的汉字输入服务器软件. 未见源代码和可执行代码公开.
o cWnn+Kinput
了解不多.
* 我想编制可以使用汉字的窗口软件,有汉化的Widget软件吗?
EZWGL是第一个汉化的窗口编程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).
作者对EZWGL进行了全面汉化, 汉化后的软件支持GB, BIG5, Japanese EUC,
和Korea EUC. 支持汉字和ASCII的混合显示, 支持输入区和文本区的汉字 输入
和混合编辑. 您可以从 http://yumj.kek.jp/www/ezwgl.html取得汉化版本.
* 听说Tcl/Tk是不错的软件包, 它能使用汉字吗?
o Tcl/Tk是广泛使用的解释性语言之一. 它同时也是CGI广泛使用的软件. 用
户只需经过短期的 训练, 便可以编制复杂的XWindows应用程序.
Tcl7.6/Tk4.2的 汉化版本支持汉字和ASCII的混显, 以及汉字的输入, 您可
以从 http://yumj.kek.jp/www/tcltk.html 取得该软件.
* 如何在Netscape显示与输入汉字?
目前Unix/Netscape中可以显示汉字, 只要选用合适的Document Encoding 就可以
了. 但是它在Entry和TextArea,按钮, 菜单等组件中不能显示汉字. 在Entry和
TextArea中输入汉字是不可能的, 因为netscape拒绝接受8-bit 字符. 目前作者
可以变相地使用汉字, 即首先把要输入的页面存成文件, 然后改动它的内容再调
入netscape. 改动的内容主要有post地址,Entry和 TextArea, 如,
<input type="text" name="username", value="Input汉字here">
<textarea rows=10 cols=60 name="body">
请在这里输入汉字
</textarea>
* 如何在email中使用汉字?
o CXterm+celm: 汉化的elm, 著名的电子邮件软件
o CXterm+cpine: 汉化的pine, 著名的电子邮件软件
* 如何在news中使用汉字?
o Netscape News
o tin: 网络新闻组阅读软件
o cpine 或 pine+CXterm:可以读写网络新闻
* 如何在IRC中使用汉字?
o Zircon+Chinput: 基于Tcl/Tk的IRC软件,支持汉字输入与显示
* 如何把汉字转化成图形?
汉字转化成图形, 要求用户能访问点阵或矢量字库, 并且即时生成图象. 即时生
成图象的软件有 GD和它的变种.
o 实时中文Web页面-->GIF产生软件
支持GB, BIG5到GIF的转换, 支持多种字体和字型号. 同时用户可以选择
HTML标签的去除, 页面规格,如行列,边界宽度等等.
o Java -->GIF产生软件
----
于明俭(Yu2 Ming2 Jian3)
EMail: yumj@sun.ihep.ac.cn
SMail: Yu Mingjian, P.O.Box 918-7, Beijing 100039, P.R.China
Homepage: http://yumj.kek.jp/ (Mirror: http://sun.ihep.ac.cn/~yumj/)
--
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: sunup.bbs@bbs.net.ts]
--
※ 转载:.紫 丁 香 bbs.hit.edu.cn.[FROM: PR_AI.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:204.324毫秒