<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-text -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.9</version>
</dependency>
StringEscapeUtils.unescapeJava(result)
源码:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package org.apache.commons.text;
import java.io.IOException;
import java.io.Writer;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.text.translate.AggregateTranslator;
import org.apache.commons.text.translate.CharSequenceTranslator;
import org.apache.commons.text.translate.EntityArrays;
import org.apache.commons.text.translate.JavaUnicodeEscaper;
import org.apache.commons.text.translate.LookupTranslator;
import org.apache.commons.text.translate.NumericEntityEscaper;
import org.apache.commons.text.translate.NumericEntityUnescaper;
import org.apache.commons.text.translate.OctalUnescaper;
import org.apache.commons.text.translate.UnicodeUnescaper;
import org.apache.commons.text.translate.UnicodeUnpairedSurrogateRemover;
import org.apache.commons.text.translate.CsvTranslators.CsvEscaper;
import org.apache.commons.text.translate.CsvTranslators.CsvUnescaper;
import org.apache.commons.text.translate.NumericEntityUnescaper.OPTION;
public class StringEscapeUtils {
public static final CharSequenceTranslator ESCAPE_JAVA;
public static final CharSequenceTranslator ESCAPE_ECMASCRIPT;
public static final CharSequenceTranslator ESCAPE_JSON;
public static final CharSequenceTranslator ESCAPE_XML10;
public static final CharSequenceTranslator ESCAPE_XML11;
public static final CharSequenceTranslator ESCAPE_HTML3;
public static final CharSequenceTranslator ESCAPE_HTML4;
public static final CharSequenceTranslator ESCAPE_CSV;
public static final CharSequenceTranslator ESCAPE_XSI;
public static final CharSequenceTranslator UNESCAPE_JAVA;
public static final CharSequenceTranslator UNESCAPE_ECMASCRIPT;
public static final CharSequenceTranslator UNESCAPE_JSON;
public static final CharSequenceTranslator UNESCAPE_HTML3;
public static final CharSequenceTranslator UNESCAPE_HTML4;
public static final CharSequenceTranslator UNESCAPE_XML;
public static final CharSequenceTranslator UNESCAPE_CSV;
public static final CharSequenceTranslator UNESCAPE_XSI;
public StringEscapeUtils() {
}
public static StringEscapeUtils.Builder builder(CharSequenceTranslator translator) {
return new StringEscapeUtils.Builder(translator);
}
public static final String escapeJava(String input) {
return ESCAPE_JAVA.translate(input);
}
public static final String escapeEcmaScript(String input) {
return ESCAPE_ECMASCRIPT.translate(input);
}
public static final String escapeJson(String input) {
return ESCAPE_JSON.translate(input);
}
public static final String unescapeJava(String input) {
return UNESCAPE_JAVA.translate(input);
}
public static final String unescapeEcmaScript(String input) {
return UNESCAPE_ECMASCRIPT.translate(input);
}
public static final String unescapeJson(String input) {
return UNESCAPE_JSON.translate(input);
}
public static final String escapeHtml4(String input) {
return ESCAPE_HTML4.translate(input);
}
public static final String escapeHtml3(String input) {
return ESCAPE_HTML3.translate(input);
}
public static final String unescapeHtml4(String input) {
return UNESCAPE_HTML4.translate(input);
}
public static final String unescapeHtml3(String input) {
return UNESCAPE_HTML3.translate(input);
}
public static String escapeXml10(String input) {
return ESCAPE_XML10.translate(input);
}
public static String escapeXml11(String input) {
return ESCAPE_XML11.translate(input);
}
public static final String unescapeXml(String input) {
return UNESCAPE_XML.translate(input);
}
public static final String escapeCsv(String input) {
return ESCAPE_CSV.translate(input);
}
public static final String unescapeCsv(String input) {
return UNESCAPE_CSV.translate(input);
}
public static final String escapeXSI(String input) {
return ESCAPE_XSI.translate(input);
}
public static final String unescapeXSI(String input) {
return UNESCAPE_XSI.translate(input);
}
static {
Map<CharSequence, CharSequence> unescapeJavaMap = new HashMap();
unescapeJavaMap.put("\"", "\\\"");
unescapeJavaMap.put("\\", "\\\\");
ESCAPE_JAVA = new AggregateTranslator(new CharSequenceTranslator[]{new LookupTranslator(Collections.unmodifiableMap(unescapeJavaMap)), new LookupTranslator(EntityArrays.JAVA_CTRL_CHARS_ESCAPE), JavaUnicodeEscaper.outsideOf(32, 127)});
unescapeJavaMap = new HashMap();
unescapeJavaMap.put("'", "\\'");
unescapeJavaMap.put("\"", "\\\"");
unescapeJavaMap.put("\\", "\\\\");
unescapeJavaMap.put("/", "\\/");
ESCAPE_ECMASCRIPT = new AggregateTranslator(new CharSequenceTranslator[]{new LookupTranslator(Collections.unmodifiableMap(unescapeJavaMap)), new LookupTranslator(EntityArrays.JAVA_CTRL_CHARS_ESCAPE), JavaUnicodeEscaper.outsideOf(32, 127)});
unescapeJavaMap = new HashMap();
unescapeJavaMap.put("\"", "\\\"");
unescapeJavaMap.put("\\", "\\\\");
unescapeJavaMap.put("/", "\\/");
ESCAPE_JSON = new AggregateTranslator(new CharSequenceTranslator[]{new LookupTranslator(Collections.unmodifiableMap(unescapeJavaMap)), new LookupTranslator(EntityArrays.JAVA_CTRL_CHARS_ESCAPE), JavaUnicodeEscaper.outsideOf(32, 126)});
unescapeJavaMap = new HashMap();
unescapeJavaMap.put("\u0000", "");
unescapeJavaMap.put("\u0001", "");
unescapeJavaMap.put("\u0002", "");
unescapeJavaMap.put("\u0003", "");
unescapeJavaMap.put("\u0004", "");
unescapeJavaMap.put("\u0005", "");
unescapeJavaMap.put("\u0006", "");
unescapeJavaMap.put("\u0007", "");
unescapeJavaMap.put("\b", "");
unescapeJavaMap.put("\u000b", "");
unescapeJavaMap.put("\f", "");
unescapeJavaMap.put("\u000e", "");
unescapeJavaMap.put("\u000f", "");
unescapeJavaMap.put("\u0010", "");
unescapeJavaMap.put("\u0011", "");
unescapeJavaMap.put("\u0012", "");
unescapeJavaMap.put("\u0013", "");
unescapeJavaMap.put("\u0014", "");
unescapeJavaMap.put("\u0015", "");
unescapeJavaMap.put("\u0016", "");
unescapeJavaMap.put("\u0017", "");
unescapeJavaMap.put("\u0018", "");
unescapeJavaMap.put("\u0019", "");
unescapeJavaMap.put("\u001a", "");
unescapeJavaMap.put("\u001b", "");
unescapeJavaMap.put("\u001c", "");
unescapeJavaMap.put("\u001d", "");
unescapeJavaMap.put("\u001e", "");
unescapeJavaMap.put("\u001f", "");
unescapeJavaMap.put("\ufffe", "");
unescapeJavaMap.put("\uffff", "");
ESCAPE_XML10 = new AggregateTranslator(new CharSequenceTranslator[]{new LookupTranslator(EntityArrays.BASIC_ESCAPE), new LookupTranslator(EntityArrays.APOS_ESCAPE), new LookupTranslator(Collections.unmodifiableMap(unescapeJavaMap)), NumericEntityEscaper.between(127, 132), NumericEntityEscaper.between(134, 159), new UnicodeUnpairedSurrogateRemover()});
unescapeJavaMap = new HashMap();
unescapeJavaMap.put("\u0000", "");
unescapeJavaMap.put("\u000b", "");
unescapeJavaMap.put("\f", "");
unescapeJavaMap.put("\ufffe", "");
unescapeJavaMap.put("\uffff", "");
ESCAPE_XML11 = new AggregateTranslator(new CharSequenceTranslator[]{new LookupTranslator(EntityArrays.BASIC_ESCAPE), new LookupTranslator(EntityArrays.APOS_ESCAPE), new LookupTranslator(Collections.unmodifiableMap(unescapeJavaMap)), NumericEntityEscaper.between(1, 8), NumericEntityEscaper.between(14, 31), NumericEntityEscaper.between(127, 132), NumericEntityEscaper.between(134, 159), new UnicodeUnpairedSurrogateRemover()});
ESCAPE_HTML3 = new AggregateTranslator(new CharSequenceTranslator[]{new LookupTranslator(EntityArrays.BASIC_ESCAPE), new LookupTranslator(EntityArrays.ISO8859_1_ESCAPE)});
ESCAPE_HTML4 = new AggregateTranslator(new CharSequenceTranslator[]{new LookupTranslator(EntityArrays.BASIC_ESCAPE), new LookupTranslator(EntityArrays.ISO8859_1_ESCAPE), new LookupTranslator(EntityArrays.HTML40_EXTENDED_ESCAPE)});
ESCAPE_CSV = new CsvEscaper();
unescapeJavaMap = new HashMap();
unescapeJavaMap.put("|", "\\|");
unescapeJavaMap.put("&", "\\&");
unescapeJavaMap.put(";", "\\;");
unescapeJavaMap.put("<", "\\<");
unescapeJavaMap.put(">", "\\>");
unescapeJavaMap.put("(", "\\(");
unescapeJavaMap.put(")", "\\)");
unescapeJavaMap.put("$", "\\$");
unescapeJavaMap.put("`", "\\`");
unescapeJavaMap.put("\\", "\\\\");
unescapeJavaMap.put("\"", "\\\"");
unescapeJavaMap.put("'", "\\'");
unescapeJavaMap.put(" ", "\\ ");
unescapeJavaMap.put("\t", "\\\t");
unescapeJavaMap.put("\r\n", "");
unescapeJavaMap.put("\n", "");
unescapeJavaMap.put("*", "\\*");
unescapeJavaMap.put("?", "\\?");
unescapeJavaMap.put("[", "\\[");
unescapeJavaMap.put("#", "\\#");
unescapeJavaMap.put("~", "\\~");
unescapeJavaMap.put("=", "\\=");
unescapeJavaMap.put("%", "\\%");
ESCAPE_XSI = new LookupTranslator(Collections.unmodifiableMap(unescapeJavaMap));
unescapeJavaMap = new HashMap();
unescapeJavaMap.put("\\\\", "\\");
unescapeJavaMap.put("\\\"", "\"");
unescapeJavaMap.put("\\'", "'");
unescapeJavaMap.put("\\", "");
UNESCAPE_JAVA = new AggregateTranslator(new CharSequenceTranslator[]{new OctalUnescaper(), new UnicodeUnescaper(), new LookupTranslator(EntityArrays.JAVA_CTRL_CHARS_UNESCAPE), new LookupTranslator(Collections.unmodifiableMap(unescapeJavaMap))});
UNESCAPE_ECMASCRIPT = UNESCAPE_JAVA;
UNESCAPE_JSON = UNESCAPE_JAVA;
UNESCAPE_HTML3 = new AggregateTranslator(new CharSequenceTranslator[]{new LookupTranslator(EntityArrays.BASIC_UNESCAPE), new LookupTranslator(EntityArrays.ISO8859_1_UNESCAPE), new NumericEntityUnescaper(new OPTION[0])});
UNESCAPE_HTML4 = new AggregateTranslator(new CharSequenceTranslator[]{new LookupTranslator(EntityArrays.BASIC_UNESCAPE), new LookupTranslator(EntityArrays.ISO8859_1_UNESCAPE), new LookupTranslator(EntityArrays.HTML40_EXTENDED_UNESCAPE), new NumericEntityUnescaper(new OPTION[0])});
UNESCAPE_XML = new AggregateTranslator(new CharSequenceTranslator[]{new LookupTranslator(EntityArrays.BASIC_UNESCAPE), new LookupTranslator(EntityArrays.APOS_UNESCAPE), new NumericEntityUnescaper(new OPTION[0])});
UNESCAPE_CSV = new CsvUnescaper();
UNESCAPE_XSI = new StringEscapeUtils.XsiUnescaper();
}
public static final class Builder {
private final StringBuilder sb;
private final CharSequenceTranslator translator;
private Builder(CharSequenceTranslator translator) {
this.sb = new StringBuilder();
this.translator = translator;
}
public StringEscapeUtils.Builder escape(String input) {
this.sb.append(this.translator.translate(input));
return this;
}
public StringEscapeUtils.Builder append(String input) {
this.sb.append(input);
return this;
}
public String toString() {
return this.sb.toString();
}
}
static class XsiUnescaper extends CharSequenceTranslator {
private static final char BACKSLASH = '\\';
XsiUnescaper() {
}
public int translate(CharSequence input, int index, Writer out) throws IOException {
if (index != 0) {
throw new IllegalStateException("XsiUnescaper should never reach the [1] index");
} else {
String s = input.toString();
int segmentStart = 0;
int searchOffset = 0;
while(true) {
int pos = s.indexOf(92, searchOffset);
if (pos == -1) {
if (segmentStart < s.length()) {
out.write(s.substring(segmentStart));
}
return Character.codePointCount(input, 0, input.length());
}
if (pos > segmentStart) {
out.write(s.substring(segmentStart, pos));
}
segmentStart = pos + 1;
searchOffset = pos + 2;
}
}
}
}
}