我有以下代码:
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分析器。