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

来源:互联网 发布:怎样在淘宝店上架商品 编辑:程序博客网 时间:2024/04/30 07:08
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
原创粉丝点击