用相应的字符替换 Unicode 转义
Replace Unicode escapes with the corresponding character
我正在尝试将代码点(例如 \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ö
编辑:因为在 Trombone Willy 的回答中有时它不能与多个 Unicode 一起使用,这里是固定的代码:
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();
}
试试这个:
StringEscapeUtils.unescapeJava("Hall\u00F6")
Joao 的回答可能是最简单的,但是当您不想下载 apache jar 时,无论是出于 space 原因、可移植性原因,还是您只是不想弄乱许可证或其他 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();
}
希望对您有所帮助! (你不必为此感谢我,我把它交给 public 域)
我正在尝试将代码点(例如 \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ö
编辑:因为在 Trombone Willy 的回答中有时它不能与多个 Unicode 一起使用,这里是固定的代码:
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();
}
试试这个:
StringEscapeUtils.unescapeJava("Hall\u00F6")
Joao 的回答可能是最简单的,但是当您不想下载 apache jar 时,无论是出于 space 原因、可移植性原因,还是您只是不想弄乱许可证或其他 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();
}
希望对您有所帮助! (你不必为此感谢我,我把它交给 public 域)