1. 程式人生 > >Java基礎之字串的編碼(Encode)和解碼(Decode)

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打頭
		}
	}
	
}