Lucene Demo中的编码问题
使用Lucene自带的示例程序lucene-demos-3.0.3.jar时,发现其中的索引程序IndexHTML.java索引一些网页时会报错:
Parse Aborted: Lexical error at line 63, column 16.
Encountered: "\u987b" (39035), after : ""
出错的地方都是HTML标签中Unicode编码的中文字符处。
经过一些搜索和试验,解决办法如下:
1. (见http://www.wenhq.com/article/view_448.html )
第一:先下载一个javacc
第二:修改HtmlParser.jj文件的
options { IGNORE_CASE = true; STATIC = false;} 为:
options { IGNORE_CASE = true; STATIC = false; UNICODE_INPUT=true;}
第三:运行javacc HtmlParser.jj
第四:把产生出来的java文件覆盖JavaCC HTML Parser 的源文件
除了修改HtmlParse.jj外,还做了如下两处修改:
在IndexHtml.java文件中,
HTMLParser parser = new HTMLParser(fis);
改为:
HTMLParser parser = new HTMLParser(fis,"utf-8");
3.修改HTMLParser.java。
public Reader getReader() throws IOException {}中,
pipeIn = new InputStreamReader(pipeInStream, "UTF-16BE");
pipeOut = new OutputStreamWriter(pipeOutStream, "UTF-16BE");
将上面两行原来的编码都换为UTF-8。
完成上面的修改后,把java文件都编译为class文件,重新打包。
注意打包时,应该切换到/demo路径下,即此时在文件夹窗口可以看到的应该是org文件夹。
打包命令是:
jar cvf lucene-demos-3.0.3.jar org
完成上述修改后就可以使用新的jar包进行文件索引操作。