将 Unicode 转义符替换为相应的字符

Nig*_*001 1 java string unicode char unicode-escapes

我正在尝试将代码点(例如 )转换\\u00FC为它代表的字符。

\n\n
import javax.swing.JOptionPane;\n\npublic class Test {\n    public static void main(String[] args) {\n        String in = JOptionPane.showInputDialog("Write something in here");\n        System.out.println("Input: " + in);\n        // Do something before this line\n        String out = in;\n        System.out.print("And Now: " + out);\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

举个例子来解释我的意思:

\n\n

第一行控制台:Input: Hall\\u00F6

\n\n

第二条控制台线:And Now: Hall\xc3\xb6

\n\n

编辑:因为有时它不适用于 The Trombone Willy 的答案中的多个 Unicode,这里是修复的代码:

\n\n
public static String unescapeUnicode(String s) {\n    StringBuilder r = new StringBuilder();\n    for (int i = 0; i < s.length(); i++) {\n        if (s.length() >= i + 6 && s.substring(i, i + 2).equals("\\\\u")) {\n            r.append(Character.toChars(Integer.parseInt(s.substring(i + 2, i + 6), 16)));\n            i += 5;\n        } else {\n            r.append(s.charAt(i));\n        }\n    }\n    return r.toString();\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Jer*_*ov2 6

Joao 的答案可能是最简单的,但是当您不想下载 apache jar 时,无论是出于空间原因、可移植性原因,还是您只是不想弄乱许可证或其他 Apache cruft,此功能都可以提供帮助。另外,由于它没有太多功能,我认为它应该更快。这里是:

public static String unescapeUnicode(String s) {
    StringBuilder sb = new StringBuilder();

    int oldIndex = 0;

    for (int i = 0; i + 2 < s.length(); i++) {
        if (s.substring(i, i + 2).equals("\\u")) {
            sb.append(s.substring(oldIndex, i));
            int codePoint = Integer.parseInt(s.substring(i + 2, i + 6), 16);
            sb.append(Character.toChars(codePoint));

            i += 5;
            oldIndex = i + 1;
        }
    }

    sb.append(s.substring(oldIndex, s.length()));

    return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助!(你不必为此归功于我,我将其交给公共领域)