一、各种编码所占的字节空间:
gbk编码: 中文占 2 个字节,英文占 1 个字节; Java中项目的默认编码方式;
utf-8编码: 中文占 3个字节,英文占 1 个字节;
utf-16be编码:中文占 2个字节,英文占 2 个字节; Java是utf-16be编码
二、当你的字节序列是某种编码方式时,这个时候想把字节序列变成字符串时,
也需要该种编码方式,否则会出现乱码;
三、文本文件就是字节序列,可是是任意编码方式,但如果我们在中文机器上直接穿件文本文件,那么该文本文件只认 识ANSI编码的文件。
有兴趣的小伙伴们可以尝试在自己的机器上新建 联通.txt 文本文件,里面内容也为“联通”,以及 联.txt 文本文件,里面内容为“联”,再次新建 联想.txt 文本文件,里面内容为“联想”;保存,然后打开,看看有谁变成了乱码,真的非常有趣。选择文件菜单,另存为选项,观察编码方式的不同;
四、简单的代码演示:
package com.bluesky;
public class EnCode {
public static void main(String[] args) throws Exception {
String s ="蓝天abc";
byte [] byte1 = s.getBytes();//项目默认为gbk编码
for(byte b:byte1){
System.out.print( Integer.toHexString(b & 0xff)+" ");
}
System.out.println();
byte [] byte2 =s.getBytes("gbk");//gbk编码中文占两个字节,英文占一个字节,项目默认
for(byte b:byte2){
System.out.print( Integer.toHexString(b & 0xff)+" ");
}
System.out.println();
//utf-8编码中文占三个字节,英文占一个字节
byte [] byte3 =s.getBytes("utf-8");
for(byte b :byte3){
System.out.print(Integer.toHexString(b & 0xff)+" ");
}
//java是双字节编码,utf-16be编码,中文占用两个字节,英文占用两个字节
System.out.println();
byte [] byte4 =s.getBytes("utf-16be");
for(byte b :byte4){
System.out.print(Integer.toHexString(b & 0xff)+" ");
}
//当你的字节序列是某种编码时,这个时候想把字节序列变成字符串时,也需要用这种形式编码
//否则会出现乱码
System.out.println();
String str = new String(byte4);//采用项目默认编码
System.out.println(str);
String str1 = new String(byte4,"utf-16be");//指定为utf-16be编码
System.out.println(str1);
}
}