Java 字符串转 Unicode
在 Java 中,将字符串转换为 Unicode 表示有几种常见的方法,以下是几种实现方式:

使用 String.format() 和 char 的 Unicode 转义
public class StringToUnicode {
public static void main(String[] args) {
String str = "Hello 世界";
String unicodeStr = convertToUnicode(str);
System.out.println(unicodeStr);
}
public static String convertToUnicode(String str) {
StringBuilder sb = new StringBuilder();
for (char c : str.toCharArray()) {
sb.append(String.format("\\u%04x", (int) c));
}
return sb.toString();
}
}
输出:
\u0048\u0065\u006c\u006c\u006f\u0020\u4e16\u754c
使用 Integer.toHexString() 手动转换
public class StringToUnicode {
public static void main(String[] args) {
String str = "Hello 世界";
String unicodeStr = convertToUnicode(str);
System.out.println(unicodeStr);
}
public static String convertToUnicode(String str) {
StringBuilder sb = new StringBuilder();
for (char c : str.toCharArray()) {
sb.append("\\u");
sb.append(Integer.toHexString(c));
// 确保总是4位,不足前面补0
while (sb.length() - 4 < sb.indexOf("\\u" + Integer.toHexString(c))) {
sb.insert(sb.indexOf("\\u" + Integer.toHexString(c)) + 2, "0");
}
}
return sb.toString();
}
}
处理非 BMP 字符(补充平面字符)
对于超出基本多语言平面(BMP)的字符(如某些emoji),需要使用代理对(surrogate pairs):
public class StringToUnicode {
public static void main(String[] args) {
String str = "Hello 🌍 世界";
String unicodeStr = convertToUnicode(str);
System.out.println(unicodeStr);
}
public static String convertToUnicode(String str) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (Character.isHighSurrogate(c)) {
// 处理代理对
char c2 = str.charAt(++i);
int codePoint = Character.toCodePoint(c, c2);
sb.append(String.format("\\u%04x\\u%04x", (int) c, (int) c2));
} else {
sb.append(String.format("\\u%04x", (int) c));
}
}
return sb.toString();
}
}
反向转换(Unicode 转字符串)
如果需要将 Unicode 字符串转换回普通字符串:
public class UnicodeToString {
public static void main(String[] args) {
String unicodeStr = "\\u0048\\u0065\\u006c\\u006c\\u006f\\u0020\\u4e16\\u754c";
String str = convertFromUnicode(unicodeStr);
System.out.println(str);
}
public static String convertFromUnicode(String unicodeStr) {
StringBuilder sb = new StringBuilder();
String[] hex = unicodeStr.split("\\\\u");
for (int i = 1; i < hex.length; i++) {
sb.append((char) Integer.parseInt(hex[i], 16));
}
return sb.toString();
}
}
注意事项
- Unicode 转义序列在 Java 源代码中也是有效的,可以直接在字符串字面量中使用
- 对于非 BMP 字符(代码点 > 0xFFFF),需要使用代理对表示
- 转换时注意字符编码问题,确保输入字符串是正确的 UTF-16 编码
方法可以根据具体需求选择使用,方法一通常是最简洁和推荐的方式。


