如何使用JSOUP获取解析的HTML特殊字符

时间:2012-05-22 08:35:04

标签: java jsoup

我使用JSoup从网页获取H1标记值,此标记包含以下HTML。

己基β-D-吡喃葡萄糖苷

当我使用.text()方法时,我得到以下内容。 (注意?)我认为这是因为它无法解决“β”字符的HTML问题。如何在网页上显示此值。

Hexyl?-D-吡喃葡萄糖苷


在我拿到我想要的文字后,是否需要进行某种转换?

这是我的代码。

        String check = "<title>Hexyl &#946;-D-glucopyranoside &#8805;98.0% (TLC) | &#8805; &#8805;</title>";
        Document doc3 = Jsoup.parse(check);
        doc3.outputSettings().escapeMode(Entities.EscapeMode.base); // default

        doc3.outputSettings().charset("UTF-8");
        System.out.println("UTF-8: " + doc3.html());
        //doc3.outputSettings().charset("ISO 8859-1");
        doc3.outputSettings().charset("ASCII");
        System.out.println("ASCII: " + doc3.html());`

-----在控制台输出-----

    UTF-8: <html>
    <head>
    <title>Hexyl ?-D-glucopyranoside ?98.0% (TLC) | ? ? </title>
     </head>
    <body></body>
   </html>
   ASCII: <html>
    <head>
    <title>Hexyl &#946;-D-glucopyranoside &#8805;98.0% (TLC) | &#8805; &#8805;</title>
     </head>
    <body></body>
    </html>

2 个答案:

答案 0 :(得分:3)

看起来您正在使用的IDE使用了错误的字符编码。

这与你的代码无关,因为我已经运行它并且很好(输出奇怪的字符)。如果您正在使用Eclipse,请转到该特定项目的运行配置设置,然后单击“常用”选项卡,然后选择UTF-8。

答案 1 :(得分:1)

解析文档后设置charset为时已晚。我曾经遇到过同样的问题,试图按照自己的方式去做,并且悲惨地失败了。

这对我有用:

String url = "url to html page";
InputStream is is =new URL(url).openStream();
org.jsoup.nodes.Document doc = org.jsoup.Jsoup.parse(is , "ISO-8859-2", url);

如果我只将html文本作为字符串,我首先将其转换为InputString(http://www.kodejava.org/examples/265.html

InputStream is = new ByteArrayInputStream(text.getBytes("UTF-8"));

然后用正确的字符集读取它:

BufferedReaderr = new BufferedReader(new InputStreamReader(is, "UTF-8"), 4*1024);
StringBuilder total = new StringBuilder();
String line = "";
while ((line = r.readLine()) != null) {
     total.append(line);
}
r.close();
is.close();
String html = total.toString();

...并解析:

doc = org.jsoup.Jsoup.parse(html);

重要的是以某种方式获取InputStream对象,并且从这里可以使用您想要的charset。也许它可以以更直接的方式完成。但它确实有效。