StringEscapeUtils:如何对除表情符号以外的字符串进行转义?

StringEscapeUtils: How to unescape a string except emoji?

我正在使用 StringEscapeUtils#escapeJava to escape strings. By which the character: "é" (LATIN SMALL LETTER E WITH ACUTE) transformed as "\u00E9" and "😅" (SMILING FACE WITH OPEN MOUTH AND COLD SWEAT) 转换为“\uD83D\uDE05”。现在,如果我想取消对它们的转义,它们将恢复到原来的形式。但我想将“\u00E9”转义为“é”并保持“\uD83D\uDE05”不变。我应该怎么做才能使表情符号不被转义但字母被转义?

"fully unescape" 字符串,然后仅重新转义表情符号可能更容易。您可以通过使用 Character.isLowSurrogateCharacter.isHighSurrogate.

检测替代字符对来做到这一点

例如:

StringBuilder sb = new StringBuilder(str.length());
for (int i = 0; i < str.length(); ++i) {
  char c = str.charAt(i);
  if (Character.isHighSurrogate(c) || Character.isLowSurrogate(c)) {
    // Append the escaped character.
    sb.append("\u");
    sb.append(String.format("%04x", (int) c));
  } else {
    // Append the character as-is.
    sb.append(c);
  }
}
String partlyEscaped = sb.toString();

Ideone demo