编码 解码 解码错误还原 “联通”

public class Stringcode {
public static void main(String[] args) throws Exception {
1、编码  (字符-->字节)
String str = "呼啦啦";
// byte b[] = str.getBytes("gbk"); //指定編碼
byte b[] = str.getBytes();// 默認編碼
printBytes(b);

输出:27 -111 -68 -27 -107 -90 -27 -107 -90 

2、解码(字节-->字符)
String s = new String(b);
System.out.println(s);

输出:呼啦啦

3、解码还原错误
String str2 = "還你黑胡椒";
byte b2[] = str2.getBytes();// 编码


String ss = new String(b2, "iso8859-1");
System.out.println("乱码:" + ss);// 解码错误

输出:乱码:é‚„ä½ é»‘èƒ¡æ¤’

byte b3[] = ss.getBytes("iso8859-1");// 再次編碼
String sss = new String(b3);// 再次解碼
System.out.println("真實的:" + sss);

输出:真實的:還你黑胡椒

4、編碼錯誤----無法救  编码编错必挂,解码解错可以补救!
String a = "單獨上課";
byte aa[] = a.getBytes("iso8859-1");
printBytes(aa);
输出:63 63 63 63 

 5、“联通”的 碼值---乱码,utf-8 gbk 混一起,分辨不出
String lt = "联通";
byte lt2[] = lt.getBytes("gbk");
 for (int n : lt2) {
             // 转换二进制、输出后8位
System.out.print(Integer.toBinaryString(n & 0xff) + " ");
 }
       “联通”: 11000001 10101010 11001101 10101000 
       “移动”: 11010010 11000110 10110110 10101111 

      byte lt2[] = lt.getBytes();
      “联通”:11101000 10000001 10101111 11101001 10000000 10011010 
      “移动”:11100111 10100111 10111011 11100101 10001011 10010101 

}

private static void printBytes(byte[] b) {
for (int bb : b) {
System.out.print(bb + " ");
}
System.out.println();
}
}

•ASCII:美国标准信息交换码。用一个字节的7位可以表示。
•ISO8859-1:拉丁码表。欧洲码表。用一个字节的8位表示。
•GB2312:中国的中文编码表。
•GBK:中国的中文编码表升级,融合了更多的中文文字符号。
•Unicode:国际标准码,融合了多种文字。
• 所有文字都用两个字节来表示,Java语言使用的就是unicode
•UTF-8:一种变长的unicode码的实现方式,由1~4个字节表示。

Unicode:只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制 代码应该如何存储。
UTF-8:是Unicode的实现方式之一。

Unicode符号范围 UTF-8编码方式
(十六进制) (二进制)

0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值