`
l514941630
  • 浏览: 47692 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

nutch-乱码解决(转)

阅读更多
  ubuntu下nutch-1.0的安装和配置错误排除(原创)  国内部份建立在云计算之上的网站
nutch-乱码解决搜索引擎与人工智 2009-05-13 12:02:49 阅读75 评论0   字号:大中小 订阅


在Nutch的搜索框中输入中文,点击“搜索”按钮之后,可以看到搜索框中的关键字是乱码,搜索结果也为空。网上有很多文章都谈到了这个现象,这不是Nutch的问题,而是Tomcat没有对uri做编码造成的。解决的办法也很简单,在Tomcat的安装目录下找到”conf/server.xml”文件,在"Connector port=”8080″ ”那一节添加URIEncoding="UTF-8" useBodyEncodingForURI="true"可以了。完整的配置可能是下面这个样子:

<Connector port="8080" protocol="HTTP/1.1" 

connectionTimeout="20000" 

redirectPort="8443" 

URIEncoding="UTF-8" 

useBodyEncodingForURI="true"/>

修改这个文件时要特别注意,把代码复制过去后,因为字符集的问题,可能要把空格和"重新输入,否则会造成tomcat无法启动





解决方法: 修改cached.jsp


+++ cached.jsp.patched  2009-02-18 12:43:26.000000000 -0500
@@ -40,6 +40,7 @@
     .getLocale().getLanguage();
 
   Metadata metaData = bean.getParseData(details).getContentMeta();
+  Metadata parseMetaData = bean.getParseData(details).getParseMeta();
 
   String content = null;
   String contentType = (String) metaData.get(Metadata.CONTENT_TYPE);
@@ -49,7 +50,7 @@
     // but I don't know how to emit 'byte sequence' in JSP.
     // out.getOutputStream().write(bean.getContent(details)) may work, 
     // but I'm not sure.
-    String encoding = (String) metaData.get("CharEncodingForConversion"); 
+    String encoding = (String) parseMetaData.get("CharEncodingForConversion"); 
     if (encoding != null) {
       try {
         content = new String(bean.getContent(details), encoding);



Debug过程:

在Tomcat下查看Nutch抓取的页面的缓存时,发现非英语系的页面缓存显示为乱码,例如中文gb2312编码的网页

1. 首先先想dump一下segment看看是否保存了正确的raw data。

在CentOS 5.2下dump segment (bin/nutch readseg -dump crawl/segments/2009* outputdir)的时候,发现如果是缺省的locale(en_US.UTF-8),则dump的结果Content域显示乱码;如果locale是zh_CN,则dump的结果Content域显示正常,这说明segment保存了正确的raw data。

2. 查看某dump的结果片断


Parse Metadata: CharEncodingForConversion=GB2312 OriginalCharEncoding=GB2312
发现CharEncodingForConversion=GB2312 OriginalCharEncoding=GB2312都已正确设置



3. 查看cached.jsp的源代码

Metadata metaData = bean.getParseData(details).getContentMeta();

  String content = null;
  String contentType = (String) metaData.get(Metadata.CONTENT_TYPE);
  if (contentType.startsWith("text/html")) {
    // FIXME : it's better to emit the original 'byte' sequence 
    // with 'charset' set to the value of 'CharEncoding',
    // but I don't know how to emit 'byte sequence' in JSP.
    // out.getOutputStream().write(bean.getContent(details)) may work, 
    // but I'm not sure.
    String encoding = (String) metaData.get("CharEncodingForConversion");
    if (encoding != null) {
      try {
        content = new String(bean.getContent(details), encoding);
      }
      catch (UnsupportedEncodingException e) {
        // fallback to windows-1252
        content = new String(bean.getContent(details), "windows-1252");
      }
    }
    else
      content = new String(bean.getContent(details));
  }
发现其去Content Metadata中找”CharEncodingForConversion”,显然找不到,于是作了最上面(解决办法之中)的修改,使之去Parse Metadata中读取”CharEncodingForConversion”,然后解码,这时候发现缓存页面显示正确了,乱码消失了。

来自:http://blog.163.com/sukerl@126/blog/static/11202764920094130249282/
分享到:
评论

相关推荐

    nutch乱码BUG修正

    如果提供的压缩包文件“nutch乱码BUG修正”包含了具体的代码和说明,可以按照其中的指示进行操作,以更精确地解决问题。记住,始终关注每个阶段的数据编码,确保在整个流程中的一致性,是避免乱码的关键。

    nutch部分网页乱码BUG修正

    总的来说,解决Nutch的网页乱码问题需要深入理解字符编码原理,以及Nutch内部的处理流程。通过优化URL解码、HTTP头解析、字符集探测和转换逻辑,我们可以有效地避免或修复乱码问题,从而提高Nutch的抓取质量和用户...

    Nutch使用入门

    **解决常见问题:** 1. **中文乱码** - 如果搜索结果显示中文乱码,可能需要修改Tomcat的配置文件 `server.xml`,添加 `URIEncoding` 和 `useBodyEncodingForURI` 属性,设置为 `UTF-8`。 2. **网页快照乱码** - ...

    实验报告(利用Nutch和IKanalyzer构造中文分词搜索引擎)

    在运行过程中,发现因jsp文件中的转义字符缺失导致错误,通过对search.jsp、cached.jsp等文件进行修正,解决了这些问题。同时,针对中文乱码问题,分别在server.xml和cached.jsp中调整编码设置,确保中文能正确显示...

    Nutch在Tomcat下的部署.doc

    在本文中,我们将深入探讨如何在Tomcat环境下部署Nutch以及解决相关问题。 首先,部署Nutch到Tomcat涉及到以下步骤: 1. **准备Nutch的WAR包**:你需要下载Nutch的源代码或预编译的WAR文件。这里以Nutch 0.9为例,...

    Nutch全文搜索学习笔记

    ### Nutch全文搜索学习笔记 #### 一、Nutch安装与配置 **1.... 为了能够顺利地安装并...此外,针对中文支持进行了特别配置,以解决乱码问题。这些组件和配置构成了Nutch的核心架构,为实现高效全文搜索引擎奠定了基础。

    nutch无法下载中文文件的问题

    要解决这个问题,你需要在 Nutch 的配置文件(如 `conf/nutch-site.xml`)中设置正确的编码方式: ```xml &lt;name&gt;url.normalizers.charset.default &lt;value&gt;UTF-8 &lt;name&gt;fetcher.server.charset &lt;value&gt;UTF-8 ...

    nutch根据URL来查找快照2

    Nutch是Apache软件基金会开发的一款开源...通过以上知识点,我们可以了解到Nutch在处理中文URL时可能遇到的挑战,以及如何通过定制开发来解决这些问题。对于那些需要处理大量中文URL的搜索应用,这些改进显得尤为重要。

Global site tag (gtag.js) - Google Analytics