上面我们学习了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中字符串的编解码。
有好的建议,请在下方输入你的评论。