使用 Java 标准库将 HTML 字符转换回文本

Posted

技术标签:

【中文标题】使用 Java 标准库将 HTML 字符转换回文本【英文标题】:Convert HTML Character Back to Text Using Java Standard Library 【发布时间】:2010-10-10 14:55:41 【问题描述】:

我想使用 Java 标准库将一些 html 字符转换回文本。我想知道是否有任何图书馆可以实现我的目的?

/**
 * @param args the command line arguments
 */
public static void main(String[] args) 
    // TODO code application logic here

    // "Happy & Sad" in HTML form.
    String s = "Happy & Sad";
    System.out.println(s);

    try 
        // Change to "Happy & Sad". DOESN'T WORK!
        s = java.net.URLDecoder.decode(s, "UTF-8");
        System.out.println(s);
     catch (UnsupportedEncodingException ex) 

    

【问题讨论】:

【参考方案1】:

我认为 Apache Commons Lang 库的 StringEscapeUtils.unescapeHtml3()unescapeHtml4() 方法是您正在寻找的。见https://commons.apache.org/proper/commons-text/javadocs/api-release/org/apache/commons/text/StringEscapeUtils.html。

【讨论】:

最新网址:commons.apache.org/lang/api-2.6/org/apache/commons/lang/… 不要打死马,但 OP 要求的是如何在 HTML 实体和“纯”文本(对我来说是 ASCII,但 YMMV)之间进行翻译。上面的 Jakarta 库有 unescapeHTML(和 escapeHTML),可以解决问题。 URLDecoder 仍然适用于百分比编码的 URL 字符串(如 GET 参数)。 android 的情况下支持多少相同,知道吗? 最好给主url,具体版本可以删除;) => commons.apache.org/proper/commons-lang StringEscapeUtils 已弃用。现在下面的回复是最正确的。【参考方案2】:

或者你可以使用unescapeHtml4:

    String miCadena="GUÍA TELEFÓNICA";
    System.out.println(StringEscapeUtils.unescapeHtml4(miCadena));

此代码打印以下行: GUÍA TELEFÓNICA

【讨论】:

【参考方案3】:

您可以使用 org.apache.commons.lang.StringEscapeUtils 类:

String s = StringEscapeUtils.unescapeHtml("Happy & Sad")

它正在工作。

【讨论】:

我更喜欢这个解决方案。如果可能,我建议使用 Apache 库。 (我的看法)【参考方案4】:

正如@jem 所建议的,可以使用jsoup。

使用 jSoup 1.8.3 可以使用保留原始 html 的方法 Parser.unescapeEntities

import org.jsoup.parser.Parser;
...
String html = Parser.unescapeEntities(original_html, false);

似乎在以前的某些版本中不存在此方法。

【讨论】:

【参考方案5】:

这里你只需要在你的应用程序的 lib jsoup 中添加 jar 文件,然后使用这个代码。

import org.jsoup.Jsoup;

public class Encoder 
    public static void main(String args[]) 
        String s = Jsoup.parse("<Français>").text();
        System.out.print(s);
    

jsoup下载链接:http://jsoup.org/download

【讨论】:

这应该是公认的答案。没有其他库比令人惊叹的 Jsoup 更快也更容易导入。 太棒了。这就是答案。【参考方案6】:

URL 解码器只能用于解码来自“application/x-www-form-urlencoded”mime 类型的 html 表单生成的 url 中的字符串。这不支持 html 字符。

在search 之后,我在HTML Parser 库中找到了一个Translate 类。

【讨论】:

非常好的库,现在很容易做类似 github.com/jgm/pandoc/blob/master/src/Text/Pandoc/Writers/…>【参考方案7】:

java.net.URLDecoder 仅处理application/x-www-form-urlencoded MIME 格式(例如“%20”表示空格),而不处理HTML character entities。我认为Java平台上没有任何东西。您可以编写自己的实用程序类来进行转换,例如 this one。

【讨论】:

【参考方案8】:

我不知道使用标准库有什么方法可以做到这一点。但我确实知道并使用这个处理 html 实体的类。

“HTMLEntities 是一个开源 Java 类,它包含一组静态方法(htmlentities、unhtmlentities,...),可将特殊字符和扩展字符转换为 HTML 实体,反之亦然。” p>

http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=htmlentities

【讨论】:

以上是关于使用 Java 标准库将 HTML 字符转换回文本的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Java 库将标记的 YAML 对象转换为 JSON 对象?

如何仅使用标准库将 UTC 日期时间转换为本地日期时间?

PHPLaravel将HTML实体转换回普通字符

如何使用 gson 库将字符串转换为 JsonObject

使用 fmt 库将 vector<int> 转换为字符串

使用有限的类 C 库将科学计数法字符串中的数字转换为浮点数