如何使用 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&#39s search results (with **;** among **&#39** 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 代码? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 PL/SQL 中复制 Java 的 Base64 解码

如何解码 [MIME] java 邮件中的附件文件

Java基础知识十一:FileInputStream字节输入流读取文件复制读取字节数组复制图片案例,字节缓冲流介绍复制视频案例,字符串编码与解码

如何解码 ogg vorbis 文件 java?

如何在java中使用gson解码json字符串?

如何使用 java 对从 javascript 到 servletpage 的查询字符串进行编码和解码?