(一)默认是以自带的eclipse的编码方式
byte[] mybate=s.getBytes();
(二)utf-8中文是有3个字节,英文1个字节。
byte[] mybate2=s.getBytes("utf-8");//utf-8中文是有3个字节
(三)gbk中文是有2个字节,英文是1个字节
byte[] mybate3=s.getBytes("gbk");//gbk中文是有2个字节,英文是1个字节
(四)eclipse默认是java是双字节编码 utf-16be,中文占用2个字节,1个英文两个字节
byte[] mybate4=s.getBytes("utf-16be");//gbk中文是有2个字节,英文是1个字节
(五)当你的字节序列式某种编码时,这时候把字节序列变成字符串,也需要这种方式,否则会出现乱码
System.out.println();
String str=new String(mybate4);
System.out.println("str:"+str);
//字节序列转换
String str4=new String(mybate4,"utf-16be");
System.out.println("str4:"+str4);
代码如下:
package test0428;
import static org.junit.Assert.*;
import java.io.UnsupportedEncodingException;
import org.junit.Test;
public class testjinzhi {
@Test
public void test() throws UnsupportedEncodingException {
String s="学习ABC";
byte[] mybate=s.getBytes();//默认是以自带的eclipse的编码方式
for(byte b:mybate){
//以十六进制的方式转换
System.out.print(Integer.toHexString(b& 0xff)+" ");
}
System.out.println();
byte[] mybate2=s.getBytes("utf-8");//utf-8中文是有3个字节
for(byte b:mybate2){
//以十六进制的方式转换
System.out.print(Integer.toHexString(b& 0xff)+" ");
}
System.out.println();
byte[] mybate3=s.getBytes("gbk");//gbk中文是有2个字节,英文是1个字节
for(byte b:mybate3){
//以十六进制的方式转换
System.out.print(Integer.toHexString(b& 0xff)+" ");
}
//java是双字节编码 utf-16be,中文占用2个字节,1个英文两个字节
System.out.println();
byte[] mybate4=s.getBytes("utf-16be");//gbk中文是有2个字节,英文是1个字节
for(byte b:mybate4){
//以十六进制的方式转换
System.out.print(Integer.toHexString(b& 0xff)+" ");
}
/*
* 当你的字节序列式某种编码时,这时候把字节序列变成字符串,也需要这种方式,否则会出现乱码
* */
System.out.println();
String str=new String(mybate4);
System.out.println("str:"+str);
//字节序列转换
String str4=new String(mybate4,"utf-16be");
System.out.println("str4:"+str4);
}
}
运行结果如下:
d1 a7 cf b0 41 42 43 //自带的eclipse默认编码方式,我的是GBK
e5 ad a6 e4 b9 a0 41 42 43 //utf-8
d1 a7 cf b0 41 42 43 //gbk
5b 66 4e 60 0 41 0 42 0 43 //utf-16be
str:[fN`A B C //出现乱码
str4:学习ABC //转换格式后