您的位置:首页 > 编程语言 > Java开发

Java中的byte char String 编码 解码

2017-07-13 11:37 260 查看
 

char

人能识别的字符,在Java中用Unicode表示,占两个字节,可以表示中文。在jvm中,它的值是唯一的,可以用数字表示:
char a1 ='周';
char a ='\u5468'; //Unicode
char aa =0x5468; //十六进制
char aaa = 21608; //十进制
System.out.println(a1);
System.out.println(a);
System.out.println(aa);
System.out.println(aaa);
输出:
周
周
周
周

 打印所有char
int u=0;
for(int i=0; i<=0xffff; i++){
System.out.print((char)i);
u++;
if(u==100){
System.out.println();
u=0;
}
}

 
 
String 

字符串 本质上就是char[]
String a='中国人4';
System.out.println(a.length);
输出:4

 
 
byte[]

计算机能识别的二进制字节,用于CPU计算、存储或网络传输,一个byte有8位(bit)
 
编码

为什么要编码,Jvm中char可以当做数字来进行运算,每个char占两个字节非常便于CPU计算。但是用作IO传输或存储就显得字节臃余,也不能容错。
想象一下发送电报把一句话(String)变成二进制电文(byte[])叫编码,使用不同的编码表(Charset)产生的二进制电文不一样。 
String str ="a中c";
byte[] bytes = str.getBytes("utf-8");
for(byte b : bytes){
System.out.print(b+",");
}
输出:97,-28,-72,-83,99,

 
String str ="a中c";
byte[] bytes = str.getBytes("gb2312");
for(byte b : bytes){
System.out.print(b+",");
}
输出:97,-42,-48,99,

 
String str ="a中c";
byte[] bytes = str.getBytes("gbk");
for(byte b : bytes){
System.out.print(b+",");
}
输出:97,-42,-48,99,   说明gbk与gb2312是部分兼容的

 
String str ="a中国c";
byte[] bytes = str.getBytes("ascii");
for(byte b : bytes){
System.out.print(b+",");
}
输出:97,63,63,99, 对于超出范围的字符用63表示

  
 

解码

将电文(byte[])翻译成一句话(String),使用的解码表(Charset)必须和编码的一样
String str ="a中国c";
byte[] bytes = str.getBytes("ascii");
String newStr = new String(bytes, "ascii");
System.out.println(newStr);
输出:a??c

 
 
参考:https://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: