我有以下代码:

DocumentBuilderFactory builderFactory =
            DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = null;
    try {
        builder = builderFactory.newDocumentBuilder();
    } catch (ParserConfigurationException e) {
        e.printStackTrace();
    }
    Document document = null;
    try {
        URL url = new URL("http://en.wikipedia.org/wiki/Charlie_Chaplin");

        //Reader reader = new InputStreamReader(url.openStream(),"UTF-8");
        document = builder.parse(url.openStream());
    } catch (SAXException e) {
        e.printStackTrace();
        return;
    } catch (IOException e) {
        e.printStackTrace();
        return;
    }


在我尝试处理的页面上,出现以下异常:


com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException:1字节UTF-8序列的无效字节1。


如何将页面更改为UTF-8?另外,我还可以通过哪些其他方式解决此问题?

最佳答案

您正在尝试使用XML解析器读取HTML。您的角色集只是问题的开始。

您将需要适当的HTML解析器。如果要使用类似DOM的结构,建议使用http://jsoup.org/。如果只需要文本,则可以使用Apache Tika。

如果您坚持将其提供给XML解析器,则可以将字节读取到缓冲区中,然后使用Tika的字符编码检测器发现编码,然后转换为String,然后将String馈送到DOM分析器。

10-07 19:04
查看更多