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.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();
我正在使用 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.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();