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

Java 将Unicode转义替换为相应的字符,java,string,unicode,char,unicode-escapes,Java,String,Unicode,Char,Unicode Escapes,我正在尝试将代码点(如\u00FC)转换为它所表示的字符 import javax.swing.JOptionPane; public class Test { public static void main(String[] args) { String in = JOptionPane.showInputDialog("Write something in here"); System.out.println("Input: " + in);

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

import javax.swing.JOptionPane;

public class Test {
    public static void main(String[] args) {
        String in = JOptionPane.showInputDialog("Write something in here");
        System.out.println("Input: " + in);
        // Do something before this line
        String out = in;
        System.out.print("And Now: " + out);
    }
}
举例说明我的意思:

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

第二个控制台行:
现在:Hallö

编辑:因为有时在长号威利的回答中,它不能与多个独角兽配合使用,下面是修复的代码:

public static String unescapeUnicode(String s) {
    StringBuilder r = new StringBuilder();
    for (int i = 0; i < s.length(); i++) {
        if (s.length() >= i + 6 && s.substring(i, i + 2).equals("\\u")) {
            r.append(Character.toChars(Integer.parseInt(s.substring(i + 2, i + 6), 16)));
            i += 5;
        } else {
            r.append(s.charAt(i));
        }
    }
    return r.toString();
}
公共静态字符串Unicode(字符串s){
StringBuilder r=新的StringBuilder();
对于(int i=0;i=i+6和s.substring(i,i+2).equals(“\\u”)){
r、 追加(Character.toChars(Integer.parseInt(s.substring(i+2,i+6),16));
i+=5;
}否则{
r、 附加(s.charAt(i));
}
}
返回r.toString();
}
试试这个:

StringEscapeUtils.unescapeJava("Hall\\u00F6")
试试这个:

StringEscapeUtils.unescapeJava("Hall\\u00F6")

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

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;
        }
    }

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

    return sb.toString();
}
公共静态字符串Unicode(字符串s){
StringBuilder sb=新的StringBuilder();
int-oldIndex=0;
对于(int i=0;i+2

我希望这有帮助!(你不必为此表扬我,我把它归功于公共领域)

Joao的答案可能是最简单的,但当你不想下载ApacheJAR时,无论是出于空间原因、可移植性原因,还是你不想弄乱许可证或其他ApacheCruft时,这个函数都会有所帮助。另外,由于它没有太多的功能,我认为它应该更快。这是:

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;
        }
    }

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

    return sb.toString();
}
公共静态字符串Unicode(字符串s){
StringBuilder sb=新的StringBuilder();
int-oldIndex=0;
对于(int i=0;i+2

我希望这有帮助!(你不必为此给我信用,我把它给公共领域)

不,我不知道你的意思,到目前为止你的问题是什么?如果你在我的代码启动时输入“Hall\u00F6”,它也会在控制台上两次都写“Hall\u00F6”,但我希望第二次它给我“Hallö”,因为“\u00F6”是“ö”的unicode您需要显式地解析这些内容。像
\uxxx
这样的转义序列仅在Java源代码中,在控制台中不存在。不,我不知道你是什么意思,到目前为止你的问题是什么?如果你在我的代码开始时输入“Hall\u00F6”,它也会在控制台上写入“Hall\u00F6”两次,但我希望第二次它会给我“Hallö”,因为“\u00F6”是“ö”的unicode,你需要显式地解析它们。像
\uxxx
这样的转义序列仅在Java源代码中,在控制台中不存在。我们在哪个API中找到这个类?它到底做什么?这里有一点解释并没有什么坏处。它可以在commons lang:org.apache.commons commons-lang3${commons.lang3.version}上找到。本质上,它取消了任何包含unicode字符串文本的Java字符串文本。检查这里的api,您可以在Maven存储库中找到它。谢谢。但是由于许可证和导出内容,我现在将使用另一个答案中的代码。我们在哪个API中找到这个类?它到底做什么?这里有一点解释并没有什么坏处。它可以在commons lang:org.apache.commons commons-lang3${commons.lang3.version}上找到。本质上,它取消了任何包含unicode字符串文本的Java字符串文本。检查这里的api,您可以在Maven存储库中找到它。谢谢。但由于许可证和出口的东西,我将使用代码从另一个答案现在。