2012-04-14 43 views
0

我的网页抓取与Nutch的和索引之前,我保存的内容到单独的文件中提取程序类,所以我不使用-readseg让他们从索引文件返回。但是,“ü”和“ç”等特殊字符保存为“?”。Nutch的没有得到UTF-8字符

我做了Nutch Wiki page中的所有建议。编辑标记的编码属性为UTF-8,它仍然不起作用。我遇到了一些关于在系统文件中进行语言更改的建议。我在Ubuntu 11.10工作。

回答

1

有迹象表明,我能想到的3种可能性:

  1. Nutch的正常工作和你的代码写正确的东西文件,但您的环境(终端/编辑)不输出控制台上正确显示的字符。
  2. 你写出内容的代码(由nutch抓取)并不关心UTF-8编码。
  3. Nutch无法正确处理UTF-8编码。

我用Nucth抓取了有中文字符的页面,并且在readseg输出中看到了一些垃圾字符(这是用nutch 1.0)。稍后在我安装了一些语言插件并调整了终端中的设置之后,我可以看到这些字符。所以,我认为#3不太可能,你必须关注#1和#2。

+0

正如我所说的,我不使用** - readseg **,我在** Eclipse **中运行** Nutch **。我打开了一个新项目并复制了我的文件保存代码块,并尝试保存一个具有特殊字符的字符串并成功。我认为这排除了#1和#2的可能性。 ** Eclipse **的配置字符编码是UTF-8。我会专注于#3。你说“我安装了一些语言包”,你包括了什么?你可以提供一些关于这些插件的具体信息。 – 2012-04-20 07:11:48

+0

另一件事是,我试图从包含特殊字符的浏览器保存**。html **文件。当我在gedit中打开保存的文件时,我看到特殊字符无法保存,但用“ý”替换为“ı”和“þ”替换为“ş”。 – 2012-04-20 07:31:25

+0

我已经安装了Windows语言支持插件,并在腻子上改变了一些设置。 (我不使用日食。我有一个Linux服务器,我通过腻子从Windows m/c连接到它)。 – 2012-04-20 13:54:15

0

我想我已经解决了编码问题。请参见下面的代码:

co = true; 
fe = true; 
ge = true; 
pa = true; 
pd = true; 
pt = true; 
SegmentReader segmentReader2 = new SegmentReader(crwlNutchCommon.nutch_conf, co, fe, ge, pa, pd, pt); 
HashMap<String, List<Writable>> hm = new HashMap<String, List<Writable>>(); 
segmentReader2.get(path, new Text("some_url"), 

新OutputStreamWriter(新FileOutputStream中( “somefile1”), “UTF-8”),HM);

文件somefile1将可能有错误的编码,但走的更远:

FileOutputStream fos; 
DataOutputStream dos; 
File file= new File("somefile2"); 
fos = new FileOutputStream(file); 
dos=new DataOutputStream(fos); 
hm.get("co").get(0).write(dos); // look 

,这就是工作! somefile2将是“原始的”,没有任何编码修改,但在开始和结束后有一些额外的数据 - 我认为可以解析他们分析“Content.java”源文件。

+0

感谢您的回复,但我已经得到了解决方案。 Nutch正在获得UTF-8字符。我所做的是将** Fetcher **类中的** content **变量转换为从内容本身检索的编码。 – 2012-05-14 07:35:57

0

跟着你我决定修改Fetcher类,并添加支持将内容直接保存到mysql数据库。它工作得更好更快。

+1

很高兴听到这个消息。 – 2012-05-15 14:47:38

相关问题