【问题标题】:Convert Unicode to escaped Unicode programmatically以编程方式将 Unicode 转换为转义的 Unicode
【发布时间】:2017-05-18 20:24:55
【问题描述】:

我需要找出将 Unicode 值转换为转义码的方法。例如,将0x1f604 转换为"\uD83D\uDE04"

【问题讨论】:

  • 如果我使用 StringEscapeUtils.escapeJava(String) 我可以获得转义代码,但我需要像上面的示例一样从整数值中获取它。
  • 您能否更具体地了解您正在寻找的转义(因为有几个)?需要在什么环境下有效?编码的输入是什么? 32 位 Unicode 代码点?

标签: java android unicode


【解决方案1】:

您似乎正在寻找一种转义,它首先将 Unicode 代码点(32 位整数值)转换为 UTF-16 编码(多个 16 位值),这是 Java 在内部用于字符串的编码。

然后每个 16 位值使用 Java 或 Javascript 中的转义语法。

public static String encodeCodepoint(int codePoint) {

    char[] chars = Character.toChars(codePoint);
    StringBuilder sb = new StringBuilder();
    for (char ch : chars) {
        sb.append(String.format("\\u%04X", (int)ch));
    }
    return sb.toString();
}

以下代码:

System.out.println(encodeCodepoint(0x1f604));

输出:

\uD83D\uDE04

【讨论】:

  • 非常感谢@Codo。我会检查并告诉你。提前致谢!
  • 您的代码运行良好,但现在我遇到了另一个问题。 encodeCodepoint(int codePoint) 的结果用于查找转义的 unicode 并将其替换为其他代码。示例:字符串文本 = "\uD83D\uDE04"; text.replace(encodeCodepoint(0x1f604), ""); -> 但不会取代它!!!有任何想法吗??非常感谢!!!
  • 只是一个想法:如果您在调试器中检查带有表情符号的字符串,它将显示“\uD83D\uDE04”。这并不意味着它真的包含转义的 unicode 数据。这只是调试器的显示方式。
  • 很棒的简单代码。您将如何执行逆运算,即取消转义方法的输出?
猜你喜欢
  • 2021-12-26
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
相关资源
最近更新 更多