使用 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 字符转换回文本的主要内容,如果未能解决你的问题,请参考以下文章