杰瑞科技汇

Java字符串如何转为Unicode?

Java 字符串转 Unicode

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

Java字符串如何转为Unicode?-图1
(图片来源网络,侵删)

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

注意事项

  1. Unicode 转义序列在 Java 源代码中也是有效的,可以直接在字符串字面量中使用
  2. 对于非 BMP 字符(代码点 > 0xFFFF),需要使用代理对表示
  3. 转换时注意字符编码问题,确保输入字符串是正确的 UTF-16 编码

方法可以根据具体需求选择使用,方法一通常是最简洁和推荐的方式。

Java字符串如何转为Unicode?-图2
(图片来源网络,侵删)
Java字符串如何转为Unicode?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇