StringEscapeUtils:如何取消转义除表情符号以外的字符串



我正在使用StringEscapeUtils#escapeJava来转义字符串。字符:"é"(拉丁小写字母E与急性(转换为"\u00E9"和"(张开嘴巴和冷汗的笑脸(转换为"😅\uD83D\uDE05"。现在,如果我想摆脱它们,它们将恢复到原来的样子。但是我想将"\u00E9"取消转义为"é"并保持"\uD83D\uDE05"不变。我应该怎么做才能让表情符号不会被转义,而是字母被转义?

"完全取消转义"字符串,然后仅重新转义表情符号可能更容易。您可以通过检测代理项字符对、使用 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

最新更新