1. 程式人生 > >java 亂碼 字符集編碼

java 亂碼 字符集編碼

單元 效率 字節 自動選擇 用兩個 例如 表示 漢字 ava

程序經常出現亂碼怎麽辦?下面仔細說一下

首先計算機存儲的一切都是字節,只認識字節,也就是一串的二進制數字。

而字符的存儲是需要先通過字符集編碼轉換成可存儲的“二進制數字”。而出現亂碼的原因基本上都是在這個階段出現的。也就是通過字符集編碼轉換階段。比如:‘中’字符想存儲到計算機上,需要先通過XX字符編碼轉換然後存儲到計算機上,而在其他計算機(B)上讀取的時候,因為計算機內部存儲的是二進制,此時B計算機從硬盤上讀取到二進制數值通過YY字符編碼進行轉換,然後顯示,此時,如果XX編碼與YY編碼如果不兼容的話,那麽就會出現亂碼;如果兩套編碼兼容,就不會出現亂碼。

acsii編碼使用7個二進制位對字符編碼。因為計算機基本存儲單元是字節,所以采用一個字節對字符編碼。(1byte = 8bit ,一個字節由8位表示,所以在計算機內部最高位為0,其他7位是編碼值)。

ansi編碼:為了擴充acsii編碼,以用於顯示本國語言,不同的國家和地區制定了不同的標準,由此產生了GB2312,BIG5,JIS等各自的編碼標準。這些使用兩個字節來代表一個字符的各種漢字延伸編碼方式,稱為ansi編碼,又稱為mbcs。(Muilti-Bytes Charecter Set,多字節字符集)

unicode:如ansi編碼條例中所述,世界上存在著多種編碼方式。在ansi編碼下,同一個編碼值,在不同的編碼體系裏代表著不同的字。這個問題促使了unicode編碼誕生:將世界上所有符號都納入其中,無論中文、英文、日文等,每個符號都對應一個唯一的編碼,大家都使用這個編碼表,就不會出現亂碼了,這就是unicode編碼。缺點:很大的集合,雖然統一了編碼,但是效率不高。(例如存儲英文的話,前三個字節都是0,最後一個字節才是真正的存儲值,浪費空間)

utf-8:為了提高unicode編碼效率,出現了utf-8編碼。utf-8可以根據不同的編碼自動選擇編碼長短,比如英文字母使用一個字節就夠了。utf-8編碼是在unicode編碼值上通過utf-8編碼器再一次的編碼得出來的。

base64:把由其他編碼存儲的符號轉換成acsii碼。

到這裏,如果出現了亂碼,相信也會知道怎麽解決了吧。
由什麽編碼集存儲的就由什麽編碼集轉換顯示。
最好采用utf8編碼集。因為通用。

文章有不當之處,歡迎指出。

java 亂碼 字符集編碼