Java基础之字符串的编码(Encode)和解码(Decode)


package newFeatures8;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;

/*
 * 编码(由看得懂到看不懂):字符串变字节数组
 * 解码(由看不懂到看得懂):字符数组变字符串
 * String--》byte[];//str.getBytes();//str.getBytes(String CharsetName);
 * byte[]--》String;//new String(byte[] bytes)//new String(byte[] bytes,String CharsetName);
 */


public class Practice {

	public static void main(String[] args) {
		try {
			  String s="你好";
			  //ISO-8859-1  根本就不识别中文
			  
			 // byte[] bytes=s.getBytes("gbk");
			 //  System.out.println(Arrays.toString(bytes));//[-60, -29, -70, -61]
			  
			  //使用utf-8 编码每个字符占3个字节
			  //byte[] bytes=s.getBytes("utf-8");
			 // System.out.println(Arrays.toString(bytes));//[-28, -67, -96, -27, -91, -67]
			  
			 //  String s1=new String(s.getBytes("utf-8"), "gbk");//浣犲ソ
			  
			  // String s1=new String(s.getBytes("gbk"), "utf-8");//???
			  
			  //当网页已经出现乱码,而使用的Tomcat服务器,Tomcat服务器使用的是ISO-8859-1 只需要再编码解码即可
			   String s1=new String(s.getBytes("ISO-8859-1"), "utf-8");
			   System.out.println(s1);
			   //一般要养成一个习惯:就是全部用utf-8
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
	 
	}
	
	

}

package newFeatures8;

import java.io.UnsupportedEncodingException;

public class Practice {
	public static void main(String[] args) throws UnsupportedEncodingException {
		getLowest8Bit();
	}
	/*
	 * 通过研究发现:当往记事本里写入"联通"两字时,保存后打开,发现出现乱码
	 * 原因是:当你写入中文时:记事本使用的是GBK(按照一个字符两个字节)编码
	 *  ,当你打开记事本时,使用的是UTF-8(按照一个字符3个字节)解码
	 *  如何解决:只要在联通前加个汉字即可,不能是字母
	 *  
	 *  "联通"二字比较特殊
	 *  其二进制数的最低8位刚好符合UTF-8的解码格式
	 */
	public static void getLowest8Bit() throws UnsupportedEncodingException{
		String s="联通";
		byte[] bytes=s.getBytes("gbk");
		for (byte b : bytes) {
			//System.out.println(Integer.toBinaryString(b));
			/*
			    11111111111111111111111111000001
				11111111111111111111111110101010
				11111111111111111111111111001101
				11111111111111111111111110101000
			 */
			//通过使用  与上  &0xff 来获取其最低最低8位  0xff=255
			System.out.println(Integer.toBinaryString(b&0xff));
			/*
			 *  11000001
				10101010
				11001101
				10101000
			 */
			//匹配到了utf-8 的标志位
			//一个字节 标志位0打头
			//两个字节 :第一个字节110打头,第二个字节10打头
			//三个字节:第一个字节1110打头,第二个字节10打头,第三个字节10打头
		}
	}
	
}


你可能感兴趣的:(java,String)