2013-06-10 5 views
1

Я хочу сделать некоторый запрос XPath в файле HTML. Вот мой код:Java - Специальные символы html

public static void main(String args[]) { 

    try{ 

     /** We load the HTML file we want to parse */ 
     BufferedReader br = new BufferedReader(new InputStreamReader (new FileInputStream("html_doyoubuzz.html"),"UTF-8")); 


     /** we clean HTML file */   
     TagNode tagNode = new HtmlCleaner().clean(br); 
     Document doc2 = new DomSerializer(new CleanerProperties()).createDOM(tagNode); 


     /****************************** 
     *       * 
     *  XPath Requests  * 
     *       * 
     ******************************/ 

     XPath xpath = XPathFactory.newInstance().newXPath(); 

     Object dates_experience = xpath.evaluate("/html/body/div[3]/div/div/div[2]/div/div/div[2]/div[4]/div/div[3]/h4/span[2]", doc2, XPathConstants.NODESET); 

     NodeList nodes = (NodeList) dates_experience; 
     String s; 

     for (int i = 0; i < nodes.getLength(); i++) { 
      s = org.apache.commons.lang3.StringEscapeUtils.unescapeHtml4(nodes.item(i).getTextContent()); 
      System.out.println(s); 
     } 



    } 
    catch (Exception e){//Catch exception if any 
     e.printStackTrace(); 
    } 
} 

Мой HTML-файл кодируется в UTF-8 (как написано в мета-тег). Моя проблема - выход. Я получаю это:

d?cembre 2010 - d?cembre 2010) 
f?vrier 2010 - juin 2010) 
juillet 2009 - septembre 2009) 
juin 2009 - juin 2009) 
juillet 2008 - ao?t 2008) 

вместо этого, что мой желаемый результат:

décembre 2010 - décembre 2010) 
février 2010 - juin 2010) 
juillet 2009 - septembre 2009) 
juin 2009 - juin 2009) 
juillet 2008 - août 2008) 

У вас есть какие-либо идеи, чтобы решить эту проблему?

Спасибо.

+1

Вы уверены, что HTML-файл UTF-8? Я имею в виду, что окна по умолчанию используют свою собственную кодировку при сохранении файлов. Eclipse сам использует эту кодировку по умолчанию –

+0

Как я могу быть уверен? Кстати, метатег указывает, что кодировка UTF-8. –

+0

Если вы используете eclipse, а HTML-файл находится внутри вашего проекта, вы можете выбрать файл в представлении проводника и нажать alt + Enter (или щелкнуть правой кнопкой мыши и выбрать свойства). Он откроет окно, в котором вы можете проверить кодировку текста. Бета-тег - это способ, которым вы объявляете кодировку, которую собираетесь использовать, но это не заставляет ОС использовать ее. Эта ответственность за вас –

ответ

0

я, наконец, нашел ответ.

Я открыл свой html-файл с hexEdit, и я увидел несколько любопытных байтов: «EF BF BD».

Это было потому, что я щелкнул правой кнопкой мыши/скопировал/вставлял код html. Мне пришлось изменить способ загрузки моего html-файла.

1

Если вы имеете в виду вывод в java-консоли, вы можете изменить консольную кодировку. Консольная кодировка - это системная кодировка операционной системы по умолчанию. Вы можете изменить затмение ниже ссылки.

http://decoding.wordpress.com/2010/03/18/eclipse-how-to-change-the-console-output-encoding/

Если вы не используете затмение вы можете добавить параметры системы для окон

-Dfile.encoding=utf-8 

также вы можете попробовать

System.setOut(new PrintStream(System.out, true, "utf-8")); 
+0

Если я сделаю ваше первое решение, я получу это: d cembre 2010 - d cembre 2010). Если я сделаю system.setout, я получу это: d�cembre 2010 - d�cembre 2010) –

+0

Плюс, я попытался записать вывод в файл, и у меня такая же проблема :( –

+0

Мои предложения ara печать на java-консоли Если вы хотите, чтобы мои предложения не работали для вас, в вашей проблеме этого нового FileInputStream («html_doyoubuzz.html»), «UTF-8») должно быть достаточно. – Zapateus

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