2012-11-17 33 views
0

分析我有这样的代码:MalformedByteSequenceException异常,当尝试使用DOM

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?或者,我还能以其他方式解决这个问题?

回答

1

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

您将需要一个适合HTML的解析器。如果你想要一个类似DOM的结构,我推荐http://jsoup.org/。如果你只是想要文本,你可以使用Apache Tika。

如果你坚持把它提供给一个XML解析器,你可以将这些字节读入一个缓冲区,然后使用Tika的字符编码检测器来发现编码,然后转换为一个字符串,并将字符串提供给DOM解析器。