Javadoc StringEscapeUtils.escapeXml
говорит о том, что мы должны использовать
StringEscapeUtils.ESCAPE_XML.with( new UnicodeEscaper(Range.between(0x7f, Integer.MAX_VALUE)) );
Но вместо UnicodeEscaper
следует использовать NumericEntityEscaper
.UnicodeEscaper
изменит все на \u1234
символов, но NumericEntityEscaper
сбрасывается как {
, что и ожидалось.
package mypackage;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.text.translate.CharSequenceTranslator;
import org.apache.commons.lang3.text.translate.NumericEntityEscaper;
public class XmlEscaper {
public static void main(final String[] args) {
final String xmlToEscape = "<hello>Hi</hello>" + "_ _" + "__ __" + "___ ___" + "after "; // the line cont
// no Unicode escape
final String escapedXml = StringEscapeUtils.escapeXml(xmlToEscape);
// escape Unicode as numeric codes. For instance, escape non-breaking space as  
final CharSequenceTranslator translator = StringEscapeUtils.ESCAPE_XML.with( NumericEntityEscaper.between(0x7f, Integer.MAX_VALUE) );
final String escapedXmlWithUnicode = translator.translate(xmlToEscape);
System.out.println("xmlToEscape: " + xmlToEscape);
System.out.println("escapedXml: " + escapedXml); // does not escape Unicode characters like non-breaking space
System.out.println("escapedXml with unicode: " + escapedXmlWithUnicode); // escapes Unicode characters
}
}