Java基礎之字串的編碼(Encode)和解碼(Decode)
阿新 • • 發佈:2019-02-01
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打頭 } } }