轉自: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); } }