簡介
為使計算機支援更多語言,通常使用 0x80~0xFFFF 範圍的 2 個 位元組來表示 1 個字元。比如:漢字 '中' 在 ANSI編碼 中文作業系統中,使用 [0xD6,0xD0] 這兩個位元組存儲。
不同的國家和地區制定了不同的标準,由此産生了 GB2312、GBK、GB18030、Big5、Shift_JIS 等各自的編碼标準。這些使用多個位元組來代表一個字元的各種漢字延伸編碼方式,稱為 ANSI 編碼。在簡體中文Windows作業系統中,ANSI 編碼代表 GBK 編碼;在繁體中文Windows作業系統中,ANSI編碼代表Big5;在日文Windows作業系統中,ANSI 編碼代表 Shift_JIS 編碼。
不同 ANSI 編碼之間互不相容,當資訊在國際間交流時,無法将屬于兩種語言的文字,存儲在同一段 ANSI 編碼的文本中。
ANSI編碼表示英文字元時用一個位元組,表示中文用兩個或四個位元組。
差別
先做一個小小的試驗:
在一個檔案夾裡,把一個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了