如何使用 Java 解码 html 代码? [复制]
Posted
技术标签:
【中文标题】如何使用 Java 解码 html 代码? [复制]【英文标题】:how to decode html codes using Java? [duplicate] 【发布时间】:2012-11-24 21:01:27 【问题描述】:可能重复:Java: How to decode html character entities in Java like HttpUtility.HtmlDecode?
我需要从 html
文件中提取段落(如 *** 中的 title
)。
我可以使用Java中的正则表达式来提取我需要的字段,但我必须decode
获得的字段。
示例
提取的字段:
Paging Lucene's search results (with **;** among **'** and **s**)
解码后的字段:
Paging Lucene's search results
java中是否有任何类可以让我转换这些html代码?
【问题讨论】:
您的 HTML 是否包含标签? 是,但提取的字段不包含标签 对于初学者来说,using regex to parse HTML 首先是完全错误的。只需使用 HTML parser 之类的 Jsoup。有点体面的会立即为您取消转义 HTML。 【参考方案1】:使用Apache Commons Lang提供的方法
import org.apache.commons.lang.StringEscapeUtils;
// ...
String afterDecoding = StringEscapeUtils.unescapeHtml(beforeDecoding);
【讨论】:
commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/… - 最新链接【参考方案2】:不要不要试图用正则表达式解决所有问题。
虽然您可以做一些事情 - 例如替换实体,但更好的方法是实际使用(强大的)HTML解析器。
看到这个问题:RegEx match open tags except XHTML self-contained tags 为什么使用 regexp swiss Army 电锯是个坏主意。 说真的,阅读这个问题和最佳答案,这是一个堆栈溢出亮点!
Chuck Norris 可以使用正则表达式解析 HTML。
坏消息是:编码字符的方法不止一种。
https://en.wikipedia.org/wiki/Character_encodings_in_HTML
例如,字符“λ”可以表示为
λ
、λ
或λ
如果你真的不走运,一些网站依赖于一些浏览器的功能来猜测字符的含义。例如™
是无效的,但许多浏览器会将其解释为™
。
显然,将其留给专用库而不是尝试自己破解自定义正则表达式是个好主意。
所以我强烈推荐:
将字符串输入到强大的 HTML 解析器中 获取已解析(并完全解码)的字符串【讨论】:
我需要从具有相同结构和标签的 html 中提取(如***)。所以我认为正则表达式是一个很好的方法。 @MrCarAsus:不,不是。使用 HTML 解析器和 DOM 进行提取。这就是他们的目的! 尝试使用 DBPedia,顺便说一句。它是已经解析过的***版本。 你知道 *** 的解析版本吗?我尝试将正则表达式与 *** htmls 一起使用,它可以工作。我使用一组应用于 htlm 的正则表达式提取标题和答案。 @MikeSamuel 该页面在数字 3 中显示:“not ... 在 U+0080–U+009F 范围内”。 0x0099 在此范围内。以上是关于如何使用 Java 解码 html 代码? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Python 或 Java 解码这个奇怪的字符串 [关闭]
如何使用 PHP 解码带有注释的 JSON 文件? [复制]