`
zhaoImpulse
  • 浏览: 80973 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

htmlparser解析html时的编码问题

 
阅读更多

htmlparser是个解析html文件的一个很不错的库。它能够过滤几乎所有的html元素,而只提供给我们纯文本。但是要用它来解析html,需要好好的搞一个搞编码问题。

htmlparser的默认编码类型是iso,所以我们要根据文件内容的不同来手动设置一个所需要的编码。

 

Parser myParser = new Parser(file.getAbsolutePath());
myParser.setEncoding("unicode");

通常html里都会有这样一句话<meta http-equiv='Content-Type' content='text/html;charset= gbk' />

用来表示该html的编码类型是什么,但当我们用普通方法来解析这个文件时

 public void get(String path){
        File f = new File(path);
        try {
            InputStreamReader isr = new FileReader(f);
            System.out.println(isr.getEncoding());
            char[] c = new char[128];
            while(isr.read(c)>0){
                String str = String.valueOf(c);
               // System.out.println(new String(str.getBytes(),"utf-8"));
            }
            InputStream is = new FileInputStream(f);
            byte[] b = new byte[1024];
            while(is.read(b)>0){
                //String.
                String str = new String(b,"unicode");
                System.out.println(str);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
}

 这句话没有意义,无论这句话所申明的编码类型是什么,我们要想解析这个文件,仍然只能用这个文件的编码类型来解析。

但当我们用到htmlparser时,这句话就有意义了。

Parser myParser;
        try {
            myParser = new Parser(path);
            System.out.println(myParser.getEncoding());
            myParser.setEncoding("unicode");
            HtmlPage htmlpage = new HtmlPage(myParser);
            System.out.println(myParser.getEncoding());
            myParser.visitAllNodesWith(htmlpage);
            // 通过htmlparser 获取body内容
            String body = htmlpage.getBody().toHtml();
            System.out.println(body);

        } catch (ParserException e) {
            e.printStackTrace();
        }

  这个代码运行时会报一个错org.htmlparser.util.EncodingChangeException: character mismatch (new: ? [0xfe] != old:  [0x20 ]) for encoding change from unicode to gbk at character offset 0

也就是说,htmlparser在解析html时,既要用到文件的编码,也要用到<meta http-equiv='Content-Type' content='text/html;charset= gbk' />这句中的编码类型,而且它们必须一致。

当然,如果把<meta http-equiv='Content-Type' content='text/html;charset= gbk' />这句删掉,那就没有任何问题了,但为了规范化

我们仍要加上这句,并强制这句中所写的编码类型和该html文件的编码类型一致。

分享到:
评论

相关推荐

    htmlparser解析html分页

    HTMLParser是一个用于解析HTML文档的库,尤其在处理非结构化或不标准的HTML时非常有用。这个库可能被用于从网页中提取数据,比如在爬虫项目中,或者进行自动化测试时解析页面内容。本篇文章将深入探讨HTMLParser的...

    htmlparser.jar 源码加jar包 彻底解决乱码

    在解析HTML时,常见的乱码问题通常源于以下几个方面: 1. **编码识别不准确**:网页可以使用多种字符编码,如GBK、UTF-8等。如果解析器不能正确识别网页的编码,就可能导致乱码。HTMLParser.jar通过改进源码,增强...

    使用HTMLParser解析网页,找出文章后下载保存

    同时,可能还需要处理一些额外的细节,如处理编码问题、忽略广告或脚本等。 总结来说,使用HTMLParser解析网页涉及到以下步骤: 1. 继承`HTMLParser`并重写相关方法以定义解析逻辑。 2. 找到文章内容所在的标签,如...

    htmlparser的jar包

    之后,通过`import`语句引入所需的类,就可以开始使用HTMLParser解析HTML文档了。 总的来说,HTMLParser是一个强大且灵活的工具,适用于需要解析和操作HTML的Java应用,如爬虫、数据提取、网页自动化等场景。通过...

    HTMLParser 2.0

    HTMLParser 2.0 是一个专门用于解析HTML文档的库,尤其在Python编程环境中非常常见。这个库的主要功能是帮助开发者有效地提取、处理和分析HTML文档中的数据,这对于网络爬虫、网页抓取或者需要从网页中提取信息的...

    htmlparser1.6最新版

    HTMLParser的核心功能是解析HTML文档,即使在面对结构不规则或者非标准的HTML代码时,也能有效地进行解析。它提供了灵活的事件驱动模型,允许开发者通过注册不同的处理器来捕获和处理HTML元素、属性和文本内容。这个...

    htmlparser2.1.jar

    例如,可以先用HTMLParser解析HTML,然后利用Jsoup进行更精细的数据提取。 8. **学习曲线与社区支持**:由于HTMLParser2.1是用Java编写,对于熟悉Java的开发者来说,学习成本相对较低。同时,社区提供了丰富的文档...

    htmlparser使用详解

    HTMLParser 是一个 Java 库,专门用于解析 HTML 文档。它的主要优点是小巧、快速,但文档相对较少,特别是英文文档,因此对于初学者来说,上手可能有些困难。然而,一旦熟悉了 HTMLParser 的使用,你会发现其设计...

    HTMLParser使用详解

    HTMLParser 是一个用于解析HTML文档的Java库,它允许开发者以编程的方式处理HTML内容,提取数据或进行自动化处理。在本文中,我们将深入探讨HTMLParser的使用,包括其核心类`Parser`以及如何初始化和使用它。 首先...

    JAVA htmlparser 使用实例

    在Java开发过程中,解析HTML文档是一项常见的需求,尤其是在处理Web爬虫、数据抓取等应用场景时。`HtmlParser`库为开发者提供了一种简便的方式来解析HTML文档,并从中提取所需的信息。本文将通过一个具体的例子来...

    HtmlParser提取网页信息的设计与实现

    首先,使用HtmlParser解析主页的HTML代码,然后查找所有的`&lt;a&gt;`标签,提取其中的`href`属性值以及相邻的文本节点作为新闻标题。接着,对提取到的链接进行清洗,最后将清洗后的数据存储到SQL数据库中。 ##### 4.1 ...

    htmlparser使用简单讲解

    HTMLParser 是一个用于解析HTML文档的Java库,它允许开发者高效地处理HTML内容,提取所需信息或进行数据抓取。由于HTMLParser体积小且运行速度快,它在处理HTML时提供了很大的灵活性。然而,该库的文档较为有限,...

    htmlparser实现网页上抓取数据

    首先,使用Request发送GET请求获取网页HTML,然后通过HTMLParser解析HTML,提取所需数据。这个过程可以封装为一个函数或类,以便在不同网页中重复使用。 6. **注意事项和优化**: 使用HTMLParser需要注意HTML的不...

    htmlparser抓取网页内容

    在处理网页内容时,还需要考虑网页编码问题,确保正确地解码和编码数据,避免出现乱码。此外,为了提高抓取效率和处理动态加载的网页,可能需要用到`BeautifulSoup`这样的库来辅助解析,或者配合Selenium等工具模拟...

    HTMLParser

    在解析 HTML 时,正确处理各种字符集和编码是非常重要的。 5. **Formatter.dcu**:可能提供了格式化 HTML 输出的功能,例如将 DOM 树重新转换为 HTML 字符串,或者进行一些格式调整。 6. **Entities.dcu**:可能...

    彻底 HtmlParser 重写的两个类文件,直接放在目录下面或者大宝到jar里面可以用

    然而,当HTML文档编码与预期的编码不一致时,就可能出现乱码问题。例如,网页声明的编码是UTF-8,但实际内容却是GBK编码,这时如果不正确地处理编码,解析出来的字符就会出现乱码。 针对这个问题,重写`HtmlParser`...

    Java使用HtmlParser实现简单的网络爬虫

    这里我们使用了HtmlParser库,它是一个开源的Java库,专门用于解析HTML文档,提取和处理网页上的信息。以下是如何使用HtmlParser实现网络爬虫的关键知识点: 1. **HtmlParser库**:HtmlParser是一个强大的HTML解析...

    使用HtmlParser

    《使用HtmlParser解析HTML网页内容》 在信息技术领域,HTML(HyperText Markup Language)是用于构建和呈现网页的标准标记语言。然而,对于开发者而言,直接处理HTML文本有时是一项挑战,尤其是当需要从中提取特定...

    java htmlparser

    根据给定文件的信息,本文将围绕“Java HTMLParser解析网页源码”的主题展开,深入探讨其功能、工作原理以及在不同场景下的应用方法。 ### Java HTMLParser简介 HTMLParser是用Java编写的开源HTML解析器,它能帮助...

Global site tag (gtag.js) - Google Analytics