【问题标题】:Java - Html special charsJava - Html 特殊字符
【发布时间】: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


【解决方案1】:

我终于找到了答案。

我用 hexEdit 打开了我的 html 文件,我看到了一些奇怪的字节:“EF BF BD”。

这是因为我对 html 代码进行了右键单击/复制/粘贴。我不得不改变加载 html 文件的方式。

【讨论】:

    【解决方案2】:

    如果您的意思是在 java 控制台中输出,您可以更改控制台编码。控制台编码是默认的操作系统编码。您可以在下面的链接中更改 Eclipse。

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

    如果你不使用eclipse你可以为windows添加系统参数

    -Dfile.encoding=utf-8
    

    你也可以试试

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

    【讨论】:

    • 如果我做你的第一个解决方案,我会得到这个:d�cembre 2010 - d�cembre 2010)。如果我执行 system.setout,我会得到:d�cembre 2010 - d�cembre 2010)
    • 另外,我尝试将输出写入文件,但我遇到了同样的问题:(
    • 我的建议是打印到 java 控制台。如果你想提交我的建议对你不起作用。在您的问题中,这个 new FileInputStream("html_doyoubuzz.html"),"UTF-8") 应该足够了。
    猜你喜欢
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多