【发布时间】:2013-06-05 19:59:18
【问题描述】:
我想对 HTML 文件发出一些 XPath 请求。这是我的代码:
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)
你有什么办法解决这个问题吗?
谢谢。
【问题讨论】:
-
您确定 HTML 文件是 UTF-8 吗?我的意思是,Windows 在保存文件时默认使用自己的编码。 Eclipse 本身默认使用该编码
-
我如何确定?顺便说一句,元标记表示字符集是 UTF-8。
-
如果您使用的是 eclipse,并且 HTML 文件在您的项目中,您可以在资源管理器视图中选择该文件并按 alt+Enter(或右键单击并选择属性)。它将打开一个窗口,您可以在其中检查文本编码。 beta 标记是您声明要使用的编码的方式,但它不会强制操作系统使用它。这个责任是你的
-
我查过了。使用 UTF-8。
-
这里(至少)有两个不同的问题:(a)程序发出了哪些字节,以及(b)当您在某些程序中查看数据时该数据的外观(包括,什么程序配置使用的编码和字体)。为了区分这些问题,将输出发送到文件中会有所帮助,然后使用十六进制编辑器检查文件中的字节。然后你就会知道失败是在(a)还是(b)。
标签: java html xpath utf-8 htmlcleaner