将Unicode编码以程序方式转换为转义的Unicode

4

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


如果我使用StringEscapeUtils.escapeJava(String),我可以得到转义后的代码,但是我需要从一个整数值中获取它,就像上面的例子一样。 - Sami Issa
也许可以看看这个:https://dev59.com/tnI-5IYBdhLWcg3w6dC2 - Danieboy
你能更具体地描述一下你所需的转义方式吗(因为有几种不同的方式)?它需要在什么环境中有效?输入编码是什么?32位Unicode代码点吗? - Codo
1个回答

3

看起来你正在寻找一种转义方式,该方式首先将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。我会检查它并告诉你。提前致谢! - Sami Issa
你的代码完美运行,但现在我又遇到了另一个问题。encodeCodepoint(int codePoint) 的结果用于查找和替换转义的 Unicode,使用其他代码。例如:String text = "\uD83D\uDE04"; text.replace(encodeCodepoint(0x1f604), "<1f604>"); -> 但是它没有被替换掉!!!有什么想法吗?非常感谢!!! - Sami Issa
1
一个想法:如果你在调试器中检查一个带有表情符号的字符串,它会显示"\uD83D\uDE04"。这并不意味着它真的包含了转义的Unicode数据。这只是调试器显示的方式。 - Codo
太棒了,代码简单易懂。你如何执行反向操作,即对方法输出进行反转义? - Bliss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接