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

时间:2016-05-28 17:43:46

标签: 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);
        // Do something before this line
        String out = in;
        System.out.print("And Now: " + out);
    }
}

解释我的意思的一个例子:

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

第二个控制台行:And Now: Hallö

编辑:因为有时它在The Trombone Willy的答案中不适用于多个Unicodes,所以修复了以下代码:

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

2 个答案:

答案 0 :(得分:3)

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

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

    return sb.toString();
}

我希望这有帮助! (你不必为此给我信任,我把它公之于众)

答案 1 :(得分:2)

试试这个:

StringEscapeUtils.unescapeJava("Hall\\u00F6")