红联Linux门户
Linux帮助

Linux中的scim 五笔 98码表的制做

发布时间:2007-08-14 00:18:36来源:红联作者:Essence
昨天新装了系统,Fedora 6,太亲切了,感觉好久没有用LINUX了,哎,真是怀念大学的生活啊,虽然出来了才一个多月。

SCIM的五笔输入法是86的,我用不惯,网上到处找98码表也没有找到,查了一些资料后,决定自己动手。花了大半天的时间,才搞定。希望对后来者,有一点参考的作用,步骤如下:

1,在WINDOWS下生成98的码表文件winwb98.txt。

首先,机器上要有安装好的五笔98,码表一般会在WINDOWS/SYSTEM下,搜索一下".mb",就能找到,然后下载imegen.exe,网上找不到,XP系统里也没有。最后还是用EMULE找到了。运行imegen将Wubi.MB转化成winwb98.txt格式的。注意:一定要打开 winwb98.txt然后另存为,选择编码格式为UTF-8。

2,将LINUX机器上的86的BIN格式码表转成Wubi86.txt。

SCIM放码表的地方:/usr/share/scim/talbes/ , 执行scim-make-table Wubi.bin -o Wubi86.txt 就可以导出码表了。把winwb98.txt拷到LINUX机器上,还要改一下文件的换行符才行,因为WINDOWS用\r\n而LINUX用\n,还好 Fedora上有叫KHEXEDIT的十六进制编辑软件。打开winwb98.txt,搜一下“\r"也就是"0d",然后替换成空就成了。打开 Wubi86.txt和winwb98.txt比较可以发现,文件头不一样,其余的内容都是键和值的对应,但两个文件键和值的对应顺序不一样。要转化一下才行,在网上找了一个PERL的脚本,有错误不能执行,而PERL我又不懂,没法改,所以只能自己写程序了。开始的时侯是用C来写,写完才现生成的文件是 ASCII的,根本就不能用。而C的那些宽字符支持什么的,我都不会用。所以还是用JAVA来写了。源码就一个文件,用了一点正则表达式,也是今天新学的。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* @author Brodie Chi
* Aug 12, 2007
*/
public class Converter {

private final String encoding = "UTF8";
/**
* @param args
*/
public static void main(String[] args) {
if(args.length != 2){
System.out.println("Usage: java Converter \"source file\" \"dest file\"");
}else{
new Converter().convert(args[0],args[1]);
System.out.println(args[0] + "successfully Converted");
}

}
public void convert(String sourceFileName, String destFileName ){
BufferedWriter out;
BufferedReader in;
String line;

try{
in = new BufferedReader(new InputStreamReader(
new FileInputStream(sourceFileName), encoding));
out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(destFileName), encoding));
while((line = in.readLine()) != null)
out.write(getConvertedString(line) + "\n");
out.close();
in.close();
} catch (UnsupportedEncodingException e){
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}
}

public String getConvertedString(String in){
String result;
Pattern p = Pattern.compile("([\u4e00-\u9fa5]*)\\s*([a-zA-Z]*)\\s*[a-zA-Z]*");
Matcher m = p.matcher(in);
if(m.matches()){
result = m.group(2) + "\t" + m.group(1);
}else{
//do nothing return the string
result = in;
System.out.println("error");
}
return result;
}
}

编译之后,把winwb98.txt放在Converter.class一下目录下,然后打开winwb98.txt把文件头去掉,只留下那些键码对。执行java Converter winwb98.txt Wubi98.txt。打开Wubi86.txt用Wubi98.txt中的内容替换

### Begin Table data.
BEGIN_TABLE
...
END_TABLE的内容,前面的一级简码不要替换。现在Wubi86.txt中,就是SCIM五笔98的码表内容了。

3,执行:scim-make-table Wubi86.txt -b -o Wubi.bin。替换掉/usr/share/scim/talbes/Wubi.bin就行了。
文章评论

共有 4 条评论

  1. 774964107 于 2009-10-06 22:57:51发表:

    楼上的,能把沧海98词库1.9版贴出来吗?

  2. wjchem 于 2009-02-19 21:06:47发表:

    麻烦你把沧海98词库1.9版给转换一下吧,这个词库在五笔爱好者论坛有下载的,http://www.wbfans.com,我不懂编程,只会用,把bin文件做好后,我就会了,另外你要是高兴的话,把制作过程说的再详细一些,在ubuntu中98五笔是很缺的,我用了好几年的98五笔,用ubuntu才十几天,打字是个大问题,我不太喜欢拼音输入法

  3. gsxlm 于 2008-03-31 13:32:23发表:

    我试一下。真是太好了。

  4. hbyczyc 于 2007-08-27 16:45:32发表:

    :0D1