(一)文件的编码


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
}   
}


版权声明:欢迎转载,欢迎扩散,但转载时请标明作者以及原文出处,谢谢合作!             ↓↓↓

你可能感兴趣的:((一)文件的编码)