黑马程序员__ASCII码表

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------


字符编码

今天老师讲到乱码解决的问题时,听的一头雾水,突然发现自己对字符编码没有很好掌握,再次翻过头来在 复习一遍字符编码。

字符:
java字符使用unicode编码表来表示字符,

ASCII码表:
(American standard code information interchange)美国标准信息交换码,7位表示一个字符,
包含英文字母数字以及常用符号。
ISO8859-1:拉丁码表,8位表示一个字符,最高位补1。不能表示汉字。

gb2312:中文码表,两个字节表示一个字符。
UTF-8:
最多用三个字节表示一个字符,字节最高位以0开头标识用一个字节表示一个字符。
        第一个字节最高位以110开头,第二个字节最高位以10开头标识用两个字节表示一个字符。
第一个字节最高位以1110开头,第二个和第三个字节最高位以10开头,表示用三个字节表示一个字符
UTF-8编码可参考API文档中DataInput接口中关于UTF-8的描述。


编码与解码代码示例:
/*
		如果编码编错了就没办法解码了(比如,用iso8859-1编码了中文)因为它已经确定了编码没办法改变,如果解码解错了在编一次码在进行正确解码
		对中国进行ios8859-1编码,它会将中国两个字符每一个字符用一个字节来表示。*/
		byte[] b1 = "中国".getBytes("iso8859-1");
		System.out.println("iso8859-1编码:"+Arrays.toString(b1));
		//对汉字“中国”进行本地字符编码也就是gb2312,每个汉字字符用两个字节表示
		byte[] bytes = "中国".getBytes();
		//对默认gb2312编码的字符串进行iso8859-1进行解码,
		//因为gb2312编码后用四个字节来表示,iso8859-1用一个字节来表示一个字符,解码会表示为四个乱码字符
		//因为解码不会对二进制数据产生影响,所以现在虽然没有解码成功但是字符的二进制数据还是原来的。
		String str1 = new String(bytes,"iso8859-1");
		System.out.println("iso8859-1解码:"+Arrays.toString(bytes)+":"+str1);
		//对上面解析的四个乱码字符重新进行编码,因为四个字符是由iso8859-1解码得来的所以还会得到原来的字节数组
		byte[] b2 = str1.getBytes("iso8859-1");
		System.out.println("iso8859-1编码:"+Arrays.toString(b2));
		/*将字节数组按照本地编码解码,因为字符编码二进制数据从来没发生改变,所以可以成功解码
		 * 例如tomcat服务器会将gbk编码默认按照iso8859-1解码,所以可以在进行iso8859-1编码,
		 * 在用本地编码进行解码
		*/
		String result = new String(b2);
		System.out.println(result);

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

你可能感兴趣的:(java)