杰瑞科技汇

Java如何转Unicode编码?

Java 字符串转 Unicode 编码

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

Java如何转Unicode编码?-图1
(图片来源网络,侵删)

使用 String.format()char 的十六进制表示

public class StringToUnicode {
    public static void main(String[] args) {
        String str = "你好,世界!Hello World!";
        String unicodeStr = stringToUnicode(str);
        System.out.println(unicodeStr);
    }
    public static String stringToUnicode(String str) {
        StringBuilder unicode = new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            unicode.append(String.format("\\u%04x", (int) c));
        }
        return unicode.toString();
    }
}

输出示例:

\u4f60\u597d\uff0c\u4e16\u754c\uff01Hello World!

使用 Integer.toHexString() 和字符串拼接

public class StringToUnicode {
    public static void main(String[] args) {
        String str = "Java编程";
        String unicodeStr = convertToUnicode(str);
        System.out.println(unicodeStr);
    }
    public static String convertToUnicode(String str) {
        StringBuilder unicode = new StringBuilder();
        for (char c : str.toCharArray()) {
            unicode.append("\\u").append(Integer.toHexString(c | 0x10000).substring(1));
        }
        return unicode.toString();
    }
}

输出示例:

Java\u7f16\u7a0b

处理 ASCII 字符(可选)

如果希望只转换非 ASCII 字符,可以修改方法如下:

public static String stringToUnicodeSelective(String str) {
    StringBuilder unicode = new StringBuilder();
    for (int i = 0; i < str.length(); i++) {
        char c = str.charAt(i);
        if (c > 127) { // 非ASCII字符
            unicode.append(String.format("\\u%04x", (int) c));
        } else {
            unicode.append(c);
        }
    }
    return unicode.toString();
}

反向转换:Unicode 编码转字符串

如果需要将 Unicode 编码字符串转换回普通字符串:

Java如何转Unicode编码?-图2
(图片来源网络,侵删)
public static String unicodeToString(String unicodeStr) {
    StringBuilder sb = new StringBuilder();
    String[] hex = unicodeStr.split("\\\\u");
    for (int i = 1; i < hex.length; i++) {
        int data = Integer.parseInt(hex[i], 16);
        sb.append((char) data);
    }
    return sb.toString();
}

注意事项

  1. Unicode 编码使用 \u 后跟 4 位十六进制数表示
  2. 对于某些特殊字符(如 surrogate pairs),可能需要特殊处理
  3. 方法一和方法二都能正确处理基本多文种平面(BMP)内的字符
  4. 对于超出 BMP 的字符(如某些表情符号),Java 使用代理对(surrogate pairs)表示

方法可以根据具体需求选择使用,方法一最为简洁常用。

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