Преобразование символа HTML обратно в текст с использованием стандартной библиотеки Java
Я хотел бы преобразовать некоторые символы 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 ответов
Я думаю, что вы ищете методы StringEscapeUtils.escapeHtml() и unescapeHtml() из библиотеки Jakarta Commons Lang. См. http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/StringEscapeUtils.html.
Здесь вы должны просто добавить файл 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
java.net.URLDecoder
имеет дело только с application/x-www-form-urlencoded
Формат MIME (например, "%20" представляет пробел), а не с символьными сущностями HTML. Я не думаю, что есть что-то на платформе Java для этого. Вы можете написать свой собственный служебный класс для преобразования, как этот.
URL-декодер должен использоваться только для декодирования строк из URL-адресов, сгенерированных HTML-формами, которые имеют тип mime "application/x-www-form-urlencoded". Это не поддерживает символы HTML.
После поиска я нашел класс Translate в библиотеке HTML Parser.
Вы можете использовать класс org.apache.commons.lang.StringEscapeUtils:
String s = StringEscapeUtils.unescapeHtml("Happy & Sad")
Это работает.
Или вы можете использовать unescapeHtml4:
String miCadena="GUÍA TELEFÓNICA";
System.out.println(StringEscapeUtils.unescapeHtml4(miCadena));
Этот код напечатайте строку: GUÍA TELEFÓNICA
Я не знаю ни одного способа сделать это с помощью стандартной библиотеки. Но я знаю и использую этот класс, который имеет дело с HTML-сущностями.
"HTMLEntities - это Java-класс с открытым исходным кодом, который содержит набор статических методов (htmlentities, unhtmlentities,...) для преобразования специальных и расширенных символов в права HTML и наоборот".
http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=htmlentities
Как предположил @jem, можно использовать jsoup.
В jSoup 1.8.3 можно использовать метод Parser.unescapeEntities, который сохраняет исходный HTML.
import org.jsoup.parser.Parser;
...
String html = Parser.unescapeEntities(original_html, false);
Кажется, что в некоторых предыдущих выпусках этого метода нет.