Java(五十一)字符串的编解码

上面我们学习了java中IO流和缓冲流的基本使用,这些都是字节流,下面我们接着来学习java中的字符流,但是在学习字符流之前,我们先来学习一下java中的字符串的编解码。

一:编码表

常见的编码表有ASCII,utf-8,GBK等。

1:ASCII:是所有编码表的最基本的编码表,里面主要是针对一些大小写英文字母,数字,和其他的少数标点符号进行编码的

2:GBK:是中国的编码表,里面囊括了21003个汉字,里面包括ASCII,一个中文占2个字节

3:Unicod:统一码,也叫万国码、单一码(Unicode)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

1990年开始研发,1994年正式发布1.0版本,2020年发布13.0版本

*UTF-8:一个中文占3个字节

UTF-16:一个中文占2个字节

UTF-32:一个中文占4个字节

二:字符串编码

编码就是将一个字符串变成字节数据

1:public byte[] getBytes():根据平台默认的编码,将字符串变成字节数组

    
public static void main(String[] args) {
        String s = "你好!";
        byte[] by1 = s.getBytes();
 
        // GBK编码输出(一个中文字符占两个字节)
        System.out.println(Arrays.toString(by1)); // [-60, -29, -70, -61, -93, -95]
 
        // UTF-8编码输出(一个中文字符占三个字节)
        System.out.println(Arrays.toString(by1)); // [-28, -67, -96, -27, -91, -67, -17, -68, -127]
    }

2:public byte[] getBytes(String charsetName):根据我们指定的字符集,进行编码,将字符串变成字节数组

public static void main(String[] args) {
        String s = "你好!";
        try {
            byte[] by1 = s.getBytes("utf-8");
            // UTF-8编码输出(一个中文字符占三个字节)
            System.out.println(Arrays.toString(by1)); // [-28, -67, -96, -27, -91, -67, -17, -68, -127]
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

这是utf-8的编码测试

public static void main(String[] args) {
        String s = "你好!";
        try {
            byte[] by1 = s.getBytes("gbk");
            // UTF-8编码输出(一个中文字符占三个字节)
            System.out.println(Arrays.toString(by1)); // [-28, -67, -96, -27, -91, -67, -17, -68, -127]
        } catch (Exception e) {
            // TODO: handle exception
        }
 
    }

这是GBK的编码测试

三:字符串解码

解码就是将字节数据变成字符串

1:public String(byte[] bytes):根据平台默认的编码,将字节数组变成字符串

try {
            byte[] by1 = { -28, -67, -96, -27, -91, -67, -17, -68, -127 };
            String s1 = new String(by1);
            System.out.println(s1);
        } catch (Exception e) {
            // TODO: handle exception
        }

控制台输出:

你好?

2:public String(byte[] bytes,String charsetName):根据我们指定的字符集,进行解码,将字节数组变成字符串

try {
            byte[] by1 = { -28, -67, -96, -27, -91, -67, -17, -68, -127 };
            String s1 = new String(by1, "gbk");
            System.out.println(s1);
        } catch (Exception e) {
            // TODO: handle exception
        }

控制台输出:

浣犲ソ锛�

输出是乱码,因为我们byte数组中的字符串对应的是utf-8字符编码下的“你好!”,而上方程序中我们指定的字符集是gbk,因此会出现乱码的情况

以上大概就是java中字符串的编解码。

有好的建议,请在下方输入你的评论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值