`
lzj0470
  • 浏览: 1277521 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

htmlparser解析一些网页时,繁体中文会变成乱码

    博客分类:
  • java
阅读更多

最近发现用htmlparser解析一些网页时,繁体中文会变成乱码.分析了下原因,发现在用stringbean的时候htmlparser会自己根据meta来决定用哪种内码来解码,而有的网站在meta中是用gb2312来做charset,实际应用的时候又用到了gbk.gb2312是不能表示繁体的,所以就出现了乱码.解决的办法很简单,gbk是兼容gb2312的,所以在htmlparser的page.java的getcharser()那里加一句判断,如果ret是gb2312就设置为gbk,这样问题就解决了. 

修改的page.java的代码如下(/lexer/page.java)


    public String getCharset (String content)
    {
        final String CHARSET_STRING = "charset";
        int index;
        String ret;

        if (null == mSource)
            ret = DEFAULT_CHARSET;
        else
            // use existing (possibly supplied) character set:
            // bug #1322686 when illegal charset specified
            ret = mSource.getEncoding ();
        if (null != content)
        {
            index = content.indexOf (CHARSET_STRING);

            if (index != -1)
            {
                content = content.substring (index +
                    CHARSET_STRING.length ()).trim ();
                if (content.startsWith ("="))
                {
                    content = content.substring (1).trim ();
                    index = content.indexOf (";");
                    if (index != -1)
                        content = content.substring (0, index);

                    //remove any double quotes from around charset string
                    if (content.startsWith ("\"") && content.endsWith ("\"")
                        && (1 < content.length ()))
                        content = content.substring (1, content.length () - 1);

                    //remove any single quote from around charset string
                    if (content.startsWith ("'") && content.endsWith ("'")
                        && (1 < content.length ()))
                        content = content.substring (1, content.length () - 1);

                    ret = findCharset (content, ret);

                    // Charset names are not case-sensitive;
                    // that is, case is always ignored when comparing
                    // charset names.
//                    if (!ret.equalsIgnoreCase (content))
//                    {
//                        System.out.println (
//                            "detected charset \""
//                            + content
//                            + "\", using \""
//                            + ret
//                            + "\"");
//                    }
                }
            }
        }
        if(ret.equalsIgnoreCase("gb2312"))ret="GBK"; //to avoid decode problem
                                                                                           //edited by linyunfan
        return (ret);
    }

 

在最后加入了这句

        if(ret.equalsIgnoreCase("gb2312"))ret="GBK";

分享到:
评论
3 楼 qq123zhz 2011-10-21  
确实是对的。。。
2 楼 flash 2008-11-26  
不好意思,没看完就下结论了。错怪了。。。
1 楼 flash 2008-11-26  
如果页面是utf-8编码呢?你这个方法明显不能解决所有中文乱码的问题

相关推荐

    htmlparser_Java网页解析器

    HTMLParser是一款用于Java开发的网页解析库,它允许开发者高效地提取和处理HTML文档中的数据。在Web开发中,尤其是在爬虫程序或者自动化测试中,HTMLParser是一个非常实用的工具。下面将详细介绍HTMLParser库的核心...

    Java正则表达式详解+基于HTMLParser解析HTML网页

    如何在Java程序中利用正则表达式实现对字符串的解析.另外,HTMLParser是一款很强大的对HTML网页进行解析的工具,其中大量地用到正则表达式.

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

    这个库被重新编写,以解决在爬取网页时遇到的编码异常问题,确保在处理不同编码格式的网页时能够正确无误地解析文本内容,避免出现乱码。 在解析HTML时,常见的乱码问题通常源于以下几个方面: 1. **编码识别不...

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

    本篇文章将深入探讨如何使用HTMLParser库来解析网页,查找文章内容,并将其下载保存。HTMLParser是Python标准库中的一个模块,专门用于解析HTML和XML文档。 首先,我们需要了解HTMLParser的基本用法。HTMLParser是...

    htmlparser解析html分页

    这个库可能被用于从网页中提取数据,比如在爬虫项目中,或者进行自动化测试时解析页面内容。本篇文章将深入探讨HTMLParser的工作原理、如何使用以及一些常见应用场景。 1. **HTMLParser库介绍** HTMLParser是...

    htmlparser解析Html的jar包和源文件包(两个)

    使用HTMLParser的一些常见场景包括: - **网页抓取**:在网页抓取或网络爬虫项目中,HTMLParser可以用来提取网页上的链接、文本或特定数据。 - **内容分析**:在文本挖掘或信息检索应用中,HTMLParser可以帮助去除...

    htmlparser(HTML页面解析)例子

    HTMLParser类提供了一些基本的方法,如`handle_starttag`、`handle_endtag`和`handle_data`,这些方法会在遇到HTML的开始标签、结束标签和文本数据时自动调用。我们可以通过重写这些方法来实现自定义的解析逻辑。 ...

    Html解析助手htmlparser.jar

    在处理大量HTML数据时,手动解析可能会变得困难和低效,这时就需要借助像`htmlparser.jar`这样的HTML解析工具。`htmlparser.jar`是一个Java库,它为开发者提供了方便的方式来解析、遍历和操作HTML文档。 `...

    java解析html工具htmlparser的jar包及api文档

    HTMLParser可能支持事件驱动的解析模式,即在遇到特定的HTML标签时触发回调函数。此外,它可能还提供了DOM(文档对象模型)或SAX(简单API for XML)等不同的解析策略,以适应不同的性能和内存需求。 例如,以下是...

    htmlparser抓取网页内容

    标签"网页抓取"提示我们,这个项目不仅涉及HTMLParser,还可能涵盖了网络请求、网页解析、数据提取等多方面的知识。在实际操作中,开发者通常会编写爬虫程序,实现批量抓取和存储数据,可能还会涉及到异常处理、请求...

    htmlparser解析API

    HTMLParser设计的目的是为了方便地解析、提取或修改HTML内容,适用于网页数据抓取和HTML文档处理。 在使用HTMLParser时,首先需要创建一个`Parser`对象。可以通过传递一个`URLConnection`对象来构造`Parser`,这样...

    htmlparser网页分析

    当解析器遇到HTML元素、属性或其他特定结构时,会触发相应的事件,用户可以注册监听器来处理这些事件,实现自定义的处理逻辑。 4. 使用示例:在"HTMLParser使用详解-Node内容.doc"中,可能详细介绍了如何创建和配置...

    Htmlparser 网页内容抓取java

    在网页内容抓取领域,HTMLParser扮演着至关重要的角色,它可以帮助开发者高效、准确地解析复杂的网页结构,从而获取所需的信息。以下是对HTMLParser及其应用的详细介绍。 首先,HTMLParser提供了对HTML文档的解析...

    使用htmlparser制作的网页爬虫例题

    使用htmlparser制作的网页爬虫例题

    解析htmlparser的所有jar包

    然后,你可以按照HTMLParser的API文档编写代码,创建解析器实例,设置事件处理器,以及进行所需的解析操作。 总的来说,HTMLParser提供了一个强大且灵活的工具,可以帮助Java开发者在处理HTML时避免许多常见的头痛...

    htmlparser实现从网页上抓取数据.doc

    本文将详细讲解如何使用Java的htmlparser库实现网页抓取,并探讨其核心概念和用法。 首先,从给定的代码示例中可以看出,这是一个简单的Java程序,用于从指定的URL抓取HTML内容并将其保存到本地文件。这个程序的...

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

    ### HtmlParser提取网页信息的设计与实现 #### 一、引言 随着互联网的快速发展和信息量的爆炸式增长,从海量网页数据中提取有价值的信息变得日益重要。这不仅有助于提高信息检索的效率,还能为自动化的数据分析...

    HtmlParser

    使用HTMLParser,我们可以解析网页内容,提取所需信息,如文章标题、链接、图片等。以下是一些核心概念和步骤: 1. **创建自定义解析器**: 首先,我们需要继承Python的`HTMLParser`类,并重写其方法,如`handle_...

    htmlparser实现从网页上抓取数据.pdf

    在"htmlparser实现从网页上抓取数据.pdf"这份文档中,可能会详细讲解如何使用HTMLParser来高效、准确地抓取网页上的目标数据。 1. **HTMLParser简介**:HTMLParser是一个轻量级的解析器,它能够解析HTML文档并将其...

Global site tag (gtag.js) - Google Analytics