我正在使用StringEscapeUtils#escapeJava
来转义字符串。字符:"é"(拉丁小写字母E与急性(转换为"\u00E9"和"(张开嘴巴和冷汗的笑脸(转换为"😅\uD83D\uDE05"。现在,如果我想摆脱它们,它们将恢复到原来的样子。但是我想将"\u00E9"取消转义为"é"并保持"\uD83D\uDE05"不变。我应该怎么做才能让表情符号不会被转义,而是字母被转义?
"完全取消转义"字符串,然后仅重新转义表情符号可能更容易。您可以通过检测代理项字符对、使用 Character.isLowSurrogate
和 Character.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