字符集與編碼小論

內容總結於互聯網,算是半個原創

引用1,來源:不明

關於編碼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了。


引用2,來源 http://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html

字符集(Charset):是一個系統支持的所有抽象字符的集合。字符是各種文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等。

字符編碼(Character Encoding):是一套法則,使用該法則能夠對自然語言的字符的一個集合(如字母表或音節表),與其他東西的一個集合(如號碼或電脈衝)進行配對。即在符號集合與數字系統之間建立對應關係,它是信息處理的一項基本技術。通常人們用符號集合(一般情況下就是文字)來表達信息。而以計算機爲基礎的信息處理系統則是利用元件(硬件)不同狀態的組合來存儲和處理信息的。元件不同狀態的組合能代表數字系統的數字,因此字符編碼就是將符號轉換爲計算機可以接受的數字系統的數,稱爲數字代碼。


可以這樣理解:Unicode是字符集,UTF-32/ UTF-16/ UTF-8是三種字符編碼方案。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章