一、概述
在刚刚我们学字符集的编码方式经常会听到一句话:编码和解码,那这两个我能不能自己去看一下它的结果呢?
其实是可以的,在Java中有对应的方法让我们可以看见编码的结果和解码的结果。
现在我们使用的是 IDEA,IDEA默认的是 Unicode
中的UTF-8编码格式,因此 getBytes()
用的就是默认的 UTF-8
。
但是有的同学是使用 eclipse
编写代码,eclipse
默认的是 GBK
。
解码使用的其实是 String
里面的构造方法。
二、编码
编码:将我们要存储的数据变成真正存储在硬盘中的字节数据,因此返回值是一个 字节数组
//1.编码
String str = "ai你哟";
byte[] bytes1 = str.getBytes();// 默认使用的是UTF-8,一个英文一个字节,一个中文三个字节,因此转换为字节后为8个字节
System.out.println(Arrays.toString(bytes1)); // [97, 105, -28, -67, -96, -27, -109, -97],这个就是编码之后的字节数据,在存储的时候会把它们变成二进制存储在硬盘中。
但如果我们想指定编码方式,就可以使用第二个重载的 getBytes()
在指定的时候可以写小写也可以写大写,但是建议写成大写,因为GBK是多个英文单词首字母组合在一起的,用大写会更标准一些。
这个方法会有一个编译时异常,因为它要提醒你:这种方式在本地中有没有呢?例如不能写 abc
,abc
肯定是没有的。
将异常抛出即可。
byte[] bytes2 = str.getBytes("GBK");// 一个英文一个字节,一个中文两个字节,因此转换为字节后为6个字节
System.out.println(Arrays.toString(bytes2)); // [97, 105, -60, -29, -45, -76]
三、解码
解码跟编码是反过来的,我们可以将上面的字节数据变成我们想要查看的内容。
方法很简单,就是 String
的构造方法。
String str2 = new String(bytes1);
System.out.println(str2); // ai你哟
但如果解码跟编码的方式不一样,就会出现乱码现象。
String str3 = new String(bytes1,"GBK");
System.out.println(str3); // ai浣犲摕,可以发现前面的英文是没有问题的,但是中文就出现问题。