我需要通过从文件中删除某些标记来转换HTML文件。要做到这一点,我有类似的东西 -
import org.jsoup.Jsoup;
import org.jsoup.helper.Validate;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Entities;
import org.jsoup.nodes.Entities.EscapeMode;
import java.io.IOException;
import java.io.File;
import java.util.*;
public class TestJsoup {
public static void main(String[] args) throws IOException {
Validate.isTrue(args.length == 1, "usage: supply url to fetch");
String url = args[0];
Document doc = null;
if(url.contains("http")) {
doc = Jsoup.connect(url).get();
} else {
File f = new File(url);
doc = Jsoup.parse(f, null);
}
/* remove some tags */
doc.outputSettings().escapeMode(Entities.EscapeMode.extended);
System.out.println(doc.html());
return;
}
}
上面代码的问题是,当我使用扩展转义模式时,输出的html标记属性是html编码的。反正有没有避免这个?使用转义模式作为基础或xhtml不起作用,因为某些非标准扩展(如’
)编码会产生问题。对于前面的HTML,
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Test®</title>
</head>
<body style="background-color:#EDEDED;">
<P>
<font style="color:#003698; font-weight:bold;">Testing HTML encoding - ’ © with a <a href="http://www.google.com">link</a>
</font>
<br />
</P>
</body>
</html>
我得到的输出是,
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>

<title>Test®</title>

</head>

<body style="background-color:#EDEDED;">

<p>
 <font style="color:#003698; font-weight:bold;">Testing HTML encoding - ’ © with a <a href="http://www.g
oogle.com">link</a></font> <br />
</p>




</body>
</html>
有没有解决这个问题?
答案 0 :(得分:8)
您使用的是哪个output encoding字符集? (它将默认为输入,如果您从URL加载,将根据站点而有所不同。)
如果您正在使用无法处理UTF-8的系统,您可能希望将其显式设置为UTF-8
或ASCII
或其他一些低设置。如果将转义模式设置为base
(默认值),并将字符集设置为ascii,则任何字符(如rsquo
)都将无法在所选字符集中本机表示,将作为数字转义输出
例如:
String check = "<p>’ <a href='../'>Check</a></p>";
Document doc = Jsoup.parse(check);
doc.outputSettings().escapeMode(Entities.EscapeMode.base); // default
doc.outputSettings().charset("UTF-8");
System.out.println("UTF-8: " + doc.body().html());
doc.outputSettings().charset("ASCII");
System.out.println("ASCII: " + doc.body().html());
给出:
UTF-8: <p>’ <a href="../">Check</a></p>
ASCII: <p>’ <a href="../">Check</a></p>
希望这有帮助!