Как конвертировать специальные символы с помощью 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("&lt;","<");
            html_specialchars_table.put("&gt;",">");
            html_specialchars_table.put("&amp;","&");
    }
    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;
    }