java中byte字节转UTF-16LE编码字符串char

2023-12-13 03:45:40

Java内码编码之UTF-16讲解
Java中采用了UTF-16的格式, 该格式中使用两个字节表示一个基本字符, 所以Java中的char类型占用的存储空间也就是两个字节, 可两个字节最多也就表示60000多个字符, 而Unicode中现在收录了超过了14万个字符, 那么剩下的字符是如何表示的?

其实UTF-16所说的使用两个字节表示一个基本字符并不是说只能使用两个字节表示字符, 而是指的是使用两个字节为最小单位, 这个单位我们通常称之为: “代码单元(code unit)”, 对于基本字符, UTF - 16中使用一个代码单元, 也就是两个字节表示, 对于剩下的字符我们就称之为辅助字符, 辅助字符使用两个代码单元, 也就是四个字节表示, 这样表示14万字符就绰绰有余了
为了简化表达, 通常使用u + 0000 ~ u + FFFF表示基本字符, 使用u + 10000 ~ u + 10FFFF表示辅助字符, 这些用来表示字符的编号我们称之为:码点.
Java中如果是将一个辅助字符放到一个char中的时候就会编译出错, 因为我们的辅助字符需要使用两个代码单元, 也就是四个字节来表示, 而我们的一个char知识两个字节, 所以我们对于辅助字符要使用字符串变量来接收(String底层会使用两个代码单元, 也就是四个字节来存储一个辅助字符)

eg:emoji表情(emoji表情就是一个辅助字符,需要使用四个字节表示)
原文链接:https://blog.csdn.net/m0_57001006/article/details/126457158

把字节转字符具体代码如下:
    /**
     * 把字节转字符
     * @param msg byte单字节类型 256
     * @param msg_str char 单字符类型 128
     * @throws Exception
     */
    void DecodeByte(byte[] msg, char[] msg_str) throws Exception {
        //添加两个辅助字节
        byte[] newmsg = new byte[msg.length + 2];
        newmsg[0] = -1;
        newmsg[1] = -2;

        for(int i = 0; i < msg.length; ++i) {
            newmsg[i + 2] = msg[i];
        }
        //把字节转换成UTF-16编码的String类型字符串
        String s = new String(newmsg, "UTF-16");
        //把字符串转换成char类型单个字符数组
        for(int i = 0; i < s.toCharArray().length; ++i) {
            msg_str[i] = s.toCharArray()[i];
        }

    }

文章来源:https://blog.csdn.net/weixin_45132642/article/details/132734946
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。