java - 解析 HTML 时如何在 Java 中跟踪 ChangedCharSetException?

标签 java html-parsing nullpointerexception

我将以下代码与 javax.swing.text.html.parser.ParserDelegator 结合使用,以便解析来自网站的超链接。

InputStream inputStream;
InputStreamReader inputStreamReader;
inputStream = rsc.getUrl().openStream();
inputStreamReader = new InputStreamReader(inputStream);
ParserDelegator parserDelegator = new ParserDelegator();
ParserCallback parserCallback = new ParserCallback() {
    public void handleStartTag(Tag tag, MutableAttributeSet attribute, int pos) {
        if (tag == Tag.A) {
            String address = (String) attribute.getAttribute(Attribute.HREF);
            if ((address != null) && !address.equalsIgnoreCase("null"))
                links.add(address);
        }
    }
    public void handleSimpleTag(Tag t, MutableAttributeSet a, final int pos) { }
    public void handleEndTag(Tag t, final int pos) { }
    public void handleComment(final char[] data, final int pos) { }
    public void handleText(final char[] data, final int pos) { }
    public void handleError(final java.lang.String errMsg, final int pos) { }
};
parserDelegator.parse(inputStreamReader, parserCallback, false);

这对于大多数网站来说效果很好,但例如,当我尝试打开 http://www.univie.ac.at 时,我收到以下异常:

javax.swing.text.ChangedCharSetException
    at javax.swing.text.html.parser.DocumentParser.handleEmptyTag(DocumentParser.java:172)
    at javax.swing.text.html.parser.Parser.startTag(Parser.java:413)
    at javax.swing.text.html.parser.Parser.parseTag(Parser.java:1943)
    at javax.swing.text.html.parser.Parser.parseContent(Parser.java:2061)
    at javax.swing.text.html.parser.Parser.parse(Parser.java:2228)
    at javax.swing.text.html.parser.DocumentParser.parse(DocumentParser.java:105)
    at javax.swing.text.html.parser.ParserDelegator.parse(ParserDelegator.java:84)

我将如何捕获此异常,但仍继续解析我的远程文档(例如我的 InputStream)?

最佳答案

我发现的最简单的方法就是完全忽略字符集:

改变

parserDelegator.parse(inputStreamReader, parserCallback, false);

至:

parserDelegator.parse(inputStreamReader, parserCallback, true);

因为第三个选项是booleanignoreCharSet

关于java - 解析 HTML 时如何在 Java 中跟踪 ChangedCharSetException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8317352/

相关文章:

java - 将 EhCache 磁盘存储内容加载到内存中

java - jsoup 获取 HTML 失败(缺少某些部分)

java - 在 Java 中对 HTML 使用 XPath Contains

javascript - Python BeautifulSoup html.parser 不工作

Java - 为什么我会收到此 NullPointerException?

java - 重写 JLabel 中的 setText() 方法

java - BottomNavigationViewEx 空指针异常

Java : Sort JSON String using key

java - 如何删除 android TimePicker 周围的空间

java - Spring JpaRepositor返回选定的pojo字段