昨天新装了系统,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就行了。
                  	
				

774964107 于 2009-10-06 22:57:51发表:
楼上的,能把沧海98词库1.9版贴出来吗?
wjchem 于 2009-02-19 21:06:47发表:
麻烦你把沧海98词库1.9版给转换一下吧,这个词库在五笔爱好者论坛有下载的,http://www.wbfans.com,我不懂编程,只会用,把bin文件做好后,我就会了,另外你要是高兴的话,把制作过程说的再详细一些,在ubuntu中98五笔是很缺的,我用了好几年的98五笔,用ubuntu才十几天,打字是个大问题,我不太喜欢拼音输入法
gsxlm 于 2008-03-31 13:32:23发表:
我试一下。真是太好了。
hbyczyc 于 2007-08-27 16:45:32发表:
:0D1