1、编码格式介绍
- ASCII:最早用来保存英文的编码;
- 扩展字符集:对ASCII编码的扩充;
- GB2312:对ASCII的中文扩展,其中GB2312编码的字符称为“全角”,原ASCII编码的字符被称为“半角”;
- GBK标准:对GB2312的扩充;
- GB18030:对GBK标准的扩充,为了适应我国各少数民族的字符;
- UNICODE:ISO国际组织研发的可涵盖全球所有字符的编码,UNICODE编码在网络传输中,有两个标准,UTF-8和UTF-16,分别对应每次传输8个位和16个位。
更详细的说明可以参考网页编码
2、编码之间的区别(以代码为例)
import java.io.UnsupportedEncodingException;
public class EncodeDemo {
public static void main(String[] args) throws Exception {
String s = "简书ABC";
byte[] bt1 = s.getBytes();
//此处将字符串转换成字节序列用的是项目默认编码gbk
for(byte b: bt1){
//把字节转换成了int,以16进制显示
System.out.print(Integer.toHexString(b&0xff)+" ");
//(bc f2)简(ca e9)书(41)A(42)B(43)C
}
System.out.println();
//gbk编码,中文占用2个字节,英文占用1个字节。
byte[] bt2 = s.getBytes("gbk");
for(byte b: bt2){
System.out.print(Integer.toHexString(b&0xff)+" ");
//(bc f2)简(ca e9)书(41)A(42)B(43)C
}
System.out.println();
//utf-8编码,中文占用3个字节,英文占用1个字节。
byte[] bt3 = s.getBytes("utf-8");
for(byte b: bt3){
System.out.print(Integer.toHexString(b&0xff)+" ");
//(e7 ae 80)简(e4 b9 a6)书(41)A(42)B(43)C
}
System.out.println();
//java采用双字节编码,即utf-16be编码
byte[] bt4 = s.getBytes("utf-16be");
//utf-16be编码,中文占用2个字节,英文占用2个字节。
for(byte b: bt4){
System.out.print(Integer.toHexString(b&0xff)+" ");
//(7b 80)简(4e 66)书(0 41)A(0 42)B(0 43)C
}
System.out.println();
/*
当字节序列使用某种编码时
此时想把字节序列转变为字符串
也需要使用这种编码形式
否则会出现乱码。
*/
String str1 = new String(bt4);//此时为项目默认编码gbk
System.out.println(str1);//{?Nf A B C
String str2 = new String(bt4,"utf-16be");
System.out.println(str2);//简书ABC
}
}
版权声明:欢迎转载,欢迎扩散,但转载时请标明作者以及原文出处,谢谢合作! ↓↓↓