JAVA編碼精通

轉自:http://blog.csdn.net/zheng0518/article/details/11532815

package com.test.bs;

/**
 * 
 * 1、Unicode是一種編碼規範,是爲解決全球字符通用編碼而設計的,而rUTF-8,UTF-16等是這種規範的一種實現。

   2、java內部採用Unicode編碼規範,也就是支持多語言的,具體採用的UTF-16編碼方式。

   3、不管程序過程中用到了gbk,iso8859-1等格式,在存儲與傳遞的過程中實際傳遞的都是Unicode編碼的數據,要想接收到的值不出現亂碼,就要保證傳過去的時候用的是A編碼,接收的時候也用A編碼來轉換接收。

   4、如果雙方的file.encoding確保都相同,那就省事了,都默認轉了,但往往在不同項目交互時很多時候是不一致的,這個時候是必須要進行編碼轉換的。

   5、無論如論轉換,java程序的數據都是要先和Unicode做轉換,這樣也就是能處理多語言字符集的原因了。底層保持了一致,只要在傳值和接值的時候也一致就肯定不會出現亂碼了。
 * */
public class UnicodeTest1 {

    public static void main(String args[]) throws Exception {

        String str = "中文字符";

        System.out.println("original string---" + str);// 會正常輸出原始串

        /**
         * 
         * str.getBytes();    如果括號中不寫charset,則採用的是Sytem.getProperty("file.encoding"),即當前文件的編碼方式,
         * 
         * 很多人寫的是系統的默認編碼,通過代碼測試並非如此,實際得到的是文件的編碼方式*
         * 
         * str.getBytes("charset");//指定charset,即將底層存儲的Unicode碼解析爲charset編碼格式的字節數組方式
         * 
         * String new_str=new String(str.getBytes("utf-8"),"gbk"));
         * 
         * //將已經解析出來的字節數據轉化爲gbk編碼格式的字符串,在內存中即爲gbk格式的字節數組轉爲Unicode去交互傳遞
         */

        String new_str = new String(str.getBytes("utf-8"), "gbk");

        /**
         * 
         * 此時的輸出是亂碼,在UTF-8的file.encoding下輸出gbk格式的數據肯定是亂碼,但是new_str的確是gbk編碼式的
         * 
         * 此時的亂碼源於encoding不符,但gbk格式的new_str本身數據並沒有問題,通過下面的轉換也可以看得出來
         */

        System.out.println("new string----" + new_str);

        String final_str = new String(new_str.getBytes("gbk"), "utf-8");// 此處的含意與最上邊的註釋是一致的參數含意

        /**
         * 
         *輸出是正常的,此時將gbk編碼格式的new_str字符串,用gbk這個charset去解析它,然後用utf-8再轉碼一次,
         * 
         * 因爲new_str確實是gbk格式的,才能經過utf-8編碼得到正常的數據顯示。
         */

        System.out.println("final string---" + final_str);

    }

}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章