gbk编码: 中文占用两个字节,英文占用一个字节
utf-8编码:中文占用三个字节,英文占用一个字节
java是双字节编码,是utf-16be编码
utf-16be编码:中文占用两个字节,英文占用两个字节
当你的字节序列是某种编码时,这个时候想把字节序列变成字符串,也需要用这种编码方式,否则会出现乱码
package jn.io;
import java.io.UnsupportedEncodingException;
public class EncodeDemo {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
String s = "江南AB";
byte[] bytes1 = s.getBytes();
for(byte b:bytes1){
System.out.print(Integer.toHexString(b & 0xff)+" ");
}
System.out.println();
System.out.println("gbk的编码");
byte[] bytes2 = s.getBytes("gbk");
for(byte b:bytes2){
System.err.print(Integer.toHexString(b & 0xff)+" ");
}
System.out.println("\n utf-8 的编码:");
byte[] bytes3 =s.getBytes("utf-8");
for(byte b:bytes3){
System.out.print(Integer.toHexString(b &0xff)+" ");
}
System.out.println("\njava 的编码是utf-16 中文占用2个直接,英文也是占用两个字节");
byte[] bytes4 =s.getBytes("utf-16");
for(byte b:bytes4){
System.out.print(Integer.toHexString(b &0xff)+" ");
}
System.out.println("\n当你的字节序列是某种编码时,这个时候想把字节序列变成字符串,也需要用这种编码方式,否则会出现乱码");
String string1 = new String(bytes4);
System.out.println(string1);
String string2 = new String(bytes4,"utf-16");
System.out.println(string2);
/**
* 文本文件 就是字节序列
* 可以放 任意编码的字节序列
*
* 中文系统下ANSI编码代表GBK 电脑上新建文本格式文件,只认识ansi编码;复制的来的文件什么编码都可以,但它的编码也是和原编码一致。
*/
}
}
输出的结果:
bd ad c4 cf 41 42 bd ad c4 cf 41 42
gbk的编码
utf-8 的编码:
e6 b1 9f e5 8d 97 41 42
java 的编码是utf-16 中文占用2个直接,英文也是占用两个字节
fe ff 6c 5f 53 57 0 41 0 42
当你的字节序列是某种编码时,这个时候想把字节序列变成字符串,也需要用这种编码方式,否则会出现乱码
?l_SW