關於ANSI,unicode與utf-8的區別
非常好的一篇文章,值得一看,特轉之
關於編碼ansi、GB2312、unicode與utf-8的區別
先做一個小小的試驗:
在一個文件夾里,把一個txt文本(文本里包含“今天的天氣非常好”這句話)分別另存為ansi、unicode、utf-8這三種編碼的txt文件。然后,在該文件夾上點擊右鍵,選擇“搜索(E)…”。
搜索“天氣”二字,可以搜索出ansi和unicode這兩種編碼的txt文件,搜索不出utf-8編碼的文件。
原因:
1.中文操作系統默認ansi編碼,生成的txt文件默認為ansi編碼,所以,可以搜索出來。
2.unicode是國際通用編碼,所以,可以搜索出來。
3.utf-8編碼是unicode編碼在網絡之間(主要是網頁)傳輸時的一種“變通”和“橋梁”編碼。utf-8在網絡之間傳輸時可以節約數據量。所以,使用操作系統無法搜索出txt文本。
按照utf-8創始人的願望:
端(unicode)——傳輸(utf-8)——端(unicode)
但是,后來,許多網站開發者在開發網頁時直接使用utf-8編碼。
端(utf-8)——傳輸(utf-8)——端(utf-8)
所以,在瀏覽器上看到的編碼是:unicode(utf-8)。正因為在瀏覽器上這么並列地列出unicode(utf-8),造成許多網友(甚至不少程序員)誤認為unicode=utf-8。其實,按照utf-8創始人的原意,在開發網頁時使用utf-8編碼是錯誤的做法,並且,早期的瀏覽器也不支持解析utf-8編碼。但是,眾人的力量是巨大的,微軟不得不“趨炎附勢”,在瀏覽器上支持解析utf-8編碼。
問題是:utf-8編碼影響了網站開發者,或者說,網站開發者“擴展”了utf-8編碼的使用范圍。但是,網站開發者仍然無法影響各類文檔的開發者,所以,word文檔和一些國際通用的文檔仍然使用unicode編碼而不使用utf-8編碼。
比如:“嚴”的Unicode碼是4E25,UTF-8編碼是E4B8A5,兩者是不一樣的。
在中文和日文操作系統里生成的(txt和xml)文件的編碼雖然都是ansi,但是,在簡體中文系統下,ansi 編碼代表 GB2312 編碼,在日文操作系統下,ansi 編碼代表 JIS 編碼。不同 ansi 編碼之間互不兼容,當信息在國際間交流時,無法將屬於兩種語言的文字,存儲在同一段 ansi 編碼的文本中。
結論:國際文檔(txt和xml)使用unicode編碼是正宗做法;操作系統和瀏覽器都能夠“理解”unicode編碼。瀏覽器“迫於壓力”才“理解”utf-8編碼。但是,操作系統有時只認unicode編碼。
Unicode與Unicode big endian的區別:你吃雞蛋時先吃小頭還是先吃大頭?Unicode與Unicode big endian的區別就是在編碼時小頭優先與大頭優先的區別。“隨波逐流”使用Unicode就OK了
