Jsoup中的属性值的字符集

我使用Jsoup,我需要以ascii编码的方式获取html文档中所有标签的属性值,而不用转换它们。

所以,我有以下的HTML文件

     
0, à vs è"> 3 > 2, 1 > 0

我想用Jsoup来解析。

我需要完全按照原样提取title属性的值: 2 > 1, 1 > 0, à vs è 2 > 1, 1 > 0, à vs è

我创建了一个Document对象doc如下(这是在Kotlin,但我不认为这很重要):

 val charset = Charset.forName("ascii") val doc = Jsoup.parse(File("test.html").readText(charset)) doc.outputSettings().charset(charset) 

当我打印出的文件的方式

 println(doc.toString()) 

我得到以下字符串

       
1, 1 > 0, à vs è"> 3 > 2

其与文件内容的title属性值( >在字符串"2 > 1"被转换成> )不同,而文档的其余部分是OK的。

然后,检查属性值

  doc.body().select("div").forEach { div -> println("title = ${div.attr("title")}") } 

产生以下字符串

 title = 2 > 1, 1 > 0, à vs è 

注意,这àè 转化为àè

我的问题是:在Jsoup中,我怎样才能获得html标签的属性值,保留它们在输入文件中的写法?

在上面的例子中,我需要得到字符串"2 > 1, 1 > 0, à vs è" (因为它写在输入文件中)而不是"2 > 1, 1 > 0, à vs è" niether "2 > 1, 1 > 0, à vs è"

attr()方法返回一个没有HTML实体的String,我找不到保留HTML实体的方法。 但是,可以使用Jsoup.clean()方法将字符串中的字符转换为实体。

 val charset = Charset.forName("ascii") val doc = Jsoup.parse(File("test.html").readText(charset)) doc.body().select("div").forEach { div -> val title = Jsoup.clean("${div.attr("title")}", "", Whitelist.none(), Document.OutputSettings().charset(charset)) println("title = $title") } 

结果是:

 title = 2 > 1, à vs è 

当然,这可能不是一个很好的解决方案。

Interesting Posts