在Java中,如何将各种字符编码(Unicode、UTF-8、UTF-16)转换为字符串

509 阅读1分钟

首先,我们可以通过Compart这个网站来查询指定字符的各种编码(Unicode代码点、UTF-8编码、UTF-16编码):

1.png

将Unicode代码点转为字符串

代码如下:

public class Main {
    public static void main(String[] args) {
        // 原始Unicode代码点,对应字符😭
        int codePoint = 0x1F62D;
        // 将Unicode代码点转为utf-16编码(用char存储)
        char[] arr = Character.toChars(codePoint);
        // 从char数组来构造一个string
        String s = new String(arr);
        System.out.println(s);
    }
}

将UTF-8编码转为字符串

代码如下:

public class Main {
    public static void main(String[] args) {
       // 用byte数组存储utf-8编码,需要先将字面量转为byte(因为数值可能超过127)
       byte[] utf8Code = {(byte)0xF0, (byte)0x9F, (byte)0x98, (byte)0xAD};
       String s = new String(utf8Code, StandardCharsets.UTF_8);
       System.out.println(s);
    }
}

将UTF-16编码转为字符串

方法一

在Java的字符串字面量中,可直接使用\uXXXX来表示一个utf-16编码单元:

public class Main {
    public static void main(String[] args) {
       String s = "\uD83D\uDE2D";
       System.out.println(s);
    }
}

方法二

先使用char数组存储utf-16编码,再将其转为string,效果也是一样的:

public class Main {
    public static void main(String[] args) {
       char[] utf16Code = {0xD83D, 0xDE2D};
       String s = new String(utf16Code);
       System.out.println(s);
    }
}