掃盲:字符編碼與字符集的區別(2010年10月9日修改)

近來學習字符編碼,發現網絡上總是把“字符集(Character Set)”與“字符編碼(Encode)”搞混了,我也給弄得暈頭轉向。

  其實字符編碼與字符集在本質上就是不同的東西。

  字符(Character)>
    一個文字就是一個字符。在計算機中,字符是用數字來表示的,不同的文字用不同的數字表示。

  字符集(Character Set)
    既然是“集”,也就是“集合”,“字符集”自然就是“一定量字符的集合”。
    一個字符集包含了固定數量的字符,如ASCII字符集包含A-Z、a-z、0-9、半角標點符號和特殊控制符號(如換行符)在內的128個字符。

  字符編碼(Encode)
    編碼,意思是指將數據通過一定方式表達或儲存,這個方式就叫編碼。所以字符編碼就是字符的表現、儲存方式,也就是字符集的實現方式
    但需要注意的是:有的字符編碼和字符集的名稱是一致的

  從上可以看出,字符集是字符的集合,字符編碼是把字符集的實現方式。

  字符集類型
    先看下字符的表達方式。看下錶。

 字符編碼  每個字符字節數
 ASCII  1 
 UCS-2(Unicode)  2
 UCS-4(Unicode)  4
 UTF-8(Unicode)  1 - 6
 UTF-16(Unicode)  2 - 4
 GBK/GB2312(中文)  1 - 2
 GB18030(CJK)  1 - 4
表 1

    從上表可以看出,不同的字符編碼用不同的方式表達字符集。
    所以,根據所需要的字節數不同,把恆用2個字節表示一個字符的字符集(編碼),叫做雙字節字符集(Double-Byte Character Set,DBCS),其他的叫做多字節字符集(Multi-Byte Character Set,MBCS)。如上表中只有UCS-2纔是DBCS字符集。

  常見的字符集
    Unicode:也叫統一字符集,它包含了幾乎世界上所有的已經發現且需要使用的字符(如中文、日文、英文、德文等)。
    ASCII:早期的計算機系統只能處理英文,所以ASCII也就成爲了計算機的缺省字符集,包含了英文所需要的所有字符。
    GB2312:中文字符集,包含ASCII字符集。ASCII部分用單字節表示,剩餘部分用雙字節表示。
    GBK:GB2312的擴展,但完整包含了GB2312的所有內容。
    GB18030:GBK字符集的超集,常叫大漢字字符集,也叫CJK(Chinese,Japanese,Korea)字符集,包含了中、日、韓三國語言中的所有字符。

  常見的字符編碼
    見表1。

  字符集轉換
    從一種字符集轉換到另一種字符集,由於某些字符集的並不包含原先字符集中的字符,所以有可能會導致某些字符丟失。
    例如GBK轉換成ASCII字符集,就會導致除了單字節字符(ASCII部分)外的所有字符丟失。
    注意,計算機上以ASCII方式(其實,ASCII代表了所有的MBCS字符集)儲存文件雖然可以儲存中文,但實質上是因爲GB2312和GBK等字符集是MBCS字符集,所以才歸類到ASCII中,其實本質上還是是GBK字符集而不是ASCII字符集。

  字符編碼轉換
    由於字符編碼是基於字符集的,所以字符編碼不同也可能導致部分字符丟失。但如果是相同字符集,例如UTF-8(Unicode)到UTF-16(Unicode)編碼,那麼是不會丟失的,因爲它們是同一種字符集的不同表現形式。

  因此,希望某些網站、作者、技術人員別把字符集和字符編碼搞混了。否則字符集、字符編碼本身就比較難懂,再搞混了就更難懂了。



FROM :http://fenying.blog.163.com/blog/static/102055993201061211265761/

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