【问题标题】:StringEscapeUtils: How to unescape a string except emoji?StringEscapeUtils:如何对除表情符号之外的字符串进行转义?
【发布时间】:2017-09-03 08:44:11
【问题描述】:

我正在使用StringEscapeUtils#escapeJava 来转义字符串。其中字符:“é”(LATIN SMALL LETTER E WITH ACUTE) 转换为“\u00E9”和“????” (SMILING FACE WITH OPEN MOUTH AND COLD SWEAT) 转换为“\uD83D\uDE05”。现在,如果我想取消它们,它们将恢复到原来的形式。但我想将 "\u00E9" 转义为 "é" 并保持 "\uD83D\uDE05" 原样。我应该怎么做才能使表情符号不会被转义但字母会被转义?

【问题讨论】:

    标签: java apache-commons-lang3


    【解决方案1】:

    “完全取消转义”字符串可能更容易,然后仅重新转义表情符号。您可以通过使用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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-11
      • 2012-08-28
      • 1970-01-01
      • 2015-03-17
      • 2017-07-08
      • 1970-01-01
      • 2020-04-26
      • 1970-01-01
      相关资源
      最近更新 更多