我使用JSoup从网页获取H1标记值,此标记包含以下HTML。
己基β-D-吡喃葡萄糖苷
当我使用.text()方法时,我得到以下内容。 (注意?)我认为这是因为它无法解决“β”字符的HTML问题。如何在网页上显示此值。
Hexyl?-D-吡喃葡萄糖苷
在我拿到我想要的文字后,是否需要进行某种转换?
这是我的代码。
String check = "<title>Hexyl β-D-glucopyranoside ≥98.0% (TLC) | ≥ ≥</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 β-D-glucopyranoside ≥98.0% (TLC) | ≥ ≥</title>
</head>
<body></body>
</html>
答案 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。也许它可以以更直接的方式完成。但它确实有效。