Как конвертировать специальные символы с помощью java?
у меня есть строки типа:
Avery® Laser & Inkjet Self-Adhesive
мне нужно преобразовать их в
Avery Laser & Inkjet Self-Adhesive.
т. е. удалите специальные символы и преобразуйте специальные символы html в обычные.
4 ответов
Avery® Laser & Inkjet Self-Adhesive
первым использованием StringEscapeUtils#unescapeHtml4()
(или #unescapeXml()
, в зависимости от исходного формата) для unescape &
на &
. Тогда используйте String#replaceAll()
С [^\x20-\x7e]
чтобы избавиться от символов, которые не находятся внутри диапазон ASCII для печати.
кратко:
String clean = StringEscapeUtils.unescapeHtml4(dirty).replaceAll("[^\x20-\x7e]", "");
..который производит
Avery Laser & Inkjet Self-Adhesive
(без конечной точки, как в вашем примере, но этого не было в оригинале ;))
что сказал, это однако больше похоже на просьбу решение чем запрос решение. Если вы подробнее расскажете о функциональном требовании и / или где эта строка возникла, мы сможем предоставить право решение. The ®
а именно, похоже, что это вызвано использованием неправильной кодировки для чтения строки и &
похоже, что это вызвано использованием текстового парсера для чтения строки в вместо полноценного парсер HTML.
можно использовать StringEscapeUtils
класс из проекта Apache Commons Lang.
может быть, вы можете использовать что-то вроде:
yourTxt = yourTxt.replaceAll("&", "&");
в каком-то проекте я сделал что-то типа:
public String replaceAcutesHTML(String str) {
str = str.replaceAll("á","á");
str = str.replaceAll("é","é");
str = str.replaceAll("í","í");
str = str.replaceAll("ó","ó");
str = str.replaceAll("ú","ú");
str = str.replaceAll("Á","Á");
str = str.replaceAll("É","É");
str = str.replaceAll("Í","Í");
str = str.replaceAll("Ó","Ó");
str = str.replaceAll("Ú","Ú");
str = str.replaceAll("ñ","ñ");
str = str.replaceAll("Ñ","Ñ");
return str;
}
Если вы хотите имитировать то, что функция php htmlspecialchars_decode использует функцию php get_html_translation_table (), чтобы сбросить таблицу, а затем использовать код java, например,
static Hashtable html_specialchars_table = new Hashtable();
static {
html_specialchars_table.put("<","<");
html_specialchars_table.put(">",">");
html_specialchars_table.put("&","&");
}
static String htmlspecialchars_decode_ENT_NOQUOTES(String s){
Enumeration en = html_specialchars_table.keys();
while(en.hasMoreElements()){
String key = (String)en.nextElement();
String val = (String)html_specialchars_table.get(key);
s = s.replaceAll(key, val);
}
return s;
}