2012-11-17 7 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 из 1-байтовой последовательности UTF-8.

Как сменить страницу на UTF-8? В качестве альтернативы, каким другим способом я могу это решить?

ответ

1

Вы пытаетесь читать HTML с помощью синтаксического анализа XML. Ваш набор символов - это только начало ваших проблем.

Вам понадобится правильный парсер для HTML. Если вы хотите DOM-подобную структуру, я рекомендую http://jsoup.org/. Если вы просто хотите текст, вы можете использовать Apache Tika.

Если вы настаиваете на том, чтобы передать его в XML-синтаксический анализатор, вы можете прочитать байты в буфере, а затем использовать детектор кодировки символов от Tika, чтобы обнаружить кодировку, а затем преобразовать в String и передать строку в DOM-парсер.

Смежные вопросы