Преобразование символа HTML обратно в текст с использованием стандартной библиотеки Java - PullRequest
38 голосов
/ 01 марта 2009

Я хотел бы преобразовать некоторые символы HTML обратно в текст, используя стандартную библиотеку Java. Мне было интересно, сможет ли какая-нибудь библиотека достичь моей цели?

/**
 * @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) {

    }
}

Ответы [ 8 ]

56 голосов
/ 01 марта 2009

Я думаю, что вы ищете методы StringEscapeUtils.escapeHtml () и unescapeHtml () из библиотеки Jakarta Commons Lang. См http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/StringEscapeUtils.html.

27 голосов
/ 27 сентября 2012

Здесь вам нужно просто добавить jar-файл в lib jsoup в вашем приложении и затем использовать этот код.

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

7 голосов
/ 01 марта 2009

java.net.URLDecoder имеет дело только с форматом application/x-www-form-urlencoded MIME (например, «% 20» представляет пробел), а не с символьными сущностями HTML . Я не думаю, что есть что-то на платформе Java для этого. Вы можете написать свой собственный служебный класс для преобразования, например this .

5 голосов
/ 01 марта 2009

Декодер URL следует использовать только для декодирования строк из URL-адресов, сгенерированных HTML-формами, которые имеют тип mime "application / x-www-form-urlencoded". Это не поддерживает символы HTML.

После поиска я обнаружил Translate класс в библиотеке HTML Parser .

4 голосов
/ 12 декабря 2017

Вы можете использовать класс org.apache.commons.lang.StringEscapeUtils:

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

Работает.

2 голосов
/ 01 марта 2009

Я не знаю ни одного способа сделать это с помощью стандартной библиотеки. Но я знаю и использую этот класс, который работает с HTML-сущностями.

"HTMLEntities - это Java-класс с открытым исходным кодом, который содержит набор статических методов (htmlentities, unhtmlentities, ...) для преобразования специальных и расширенных символов в права HTML и наоборот."

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

0 голосов
/ 07 апреля 2018

Или вы можете использовать unescapeHtml4:

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

Этот код выводит строку: GUÍA TELEFÓNICA

0 голосов
/ 25 сентября 2015

Как подсказал @jem, можно использовать jsoup.

В jSoup 1.8.3 можно использовать метод Parser.unescapeEntities , который сохраняет исходный HTML.

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

Похоже, что в некоторых предыдущих выпусках этот метод отсутствует.

...