編碼那些事

其實這是個歷史問題,要想真正弄懂這些編碼,去google下編碼的歷史吧。在這裏,我只簡單的記錄他們的區別

1.ASCII:基於拉丁字母的一套電腦編碼系統,它主要用於顯示現代英語,不支持其他語言

2.Ansi:由1,不同的國家和地區制定了不同的標準來支持自己的語言,由此產生了 GB2312, BIG5, JIS 等各自的編碼標準。這些使用 2 個字節來代表一個字符的各種漢字延伸編碼方式,稱爲 ANSI 編碼。在簡體中文系統下,ANSI 編碼代表 GB2312 編碼

3.Unicode:由國際組織設計,可以容納全世界所有語言文字的編碼方案.分爲:UCS-2和UCS-4,UCS-2用兩個字節編碼,UCS-4用4個字節編碼,和ASCII字符集之間的不兼容,而且Unicode其實只是一張巨大的編碼表,要在計算機裏面實現,也出現了幾種不同的方案,也就是說如何表示unicode編碼的問題,因此誕生了UTF,

4.UTF-8:針對Unicode的可變長度字符編碼,UTF-8使用一至四個字節爲每個字符編碼,電子郵件、網頁及其他存儲或傳送文字的應用中,優先採用

5.UTF-16:UTF-16編碼以16位無符號整數爲單位。現在機器上的unicode編碼一般指的就是UTF-16。絕大部分2個字節就夠了,但是不能絕對的說所有字符都是2個字節。這個要看字符的unicode編碼處於什麼範圍而定,有可能是2個字節,也可能是4個字節

6.BOM

到底採用什麼編碼,如果能檢測就好了。專家們也是這麼想的,所以專家給每種格式和字節序規定了一些特殊的編碼,

這些編碼在unicode 中是沒有使用的,所以不用擔心會衝突。

這個叫做BOM(Byte Order Mark)頭。意思是字節序標誌頭。通過它基本能確定編碼格式和字節序。
UTF編碼            Byte Order Mark   
EF BB BF    UTF-8
FE FF        UTF-16/UCS-2, little endian
FF FE        UTF-16/UCS-2, big endian
FF FE 00 00      UTF-32/UCS-4, little endian.
00 00 FE FF      UTF-32/UCS-4, big-endian.
所以通過檢測文件前面的BOM頭,基本能確定編碼格式和字節序。
但是這個BOM頭只是建議添加,不是強制的,所以不少軟件和系統沒有添加這個BOM頭(所以有些軟件格式中有帶BOM頭

和NoBOM頭的選擇),這個時候要檢測什麼格式,就比較麻煩了
當然可以檢測,但是不能保證100%準確,只能通過編碼範圍從概率上來檢查,雖然準確度還是比較高,但是不能保證

100%。所以,時常看到檢測錯誤的軟件,也不奇怪了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章