扫盲:字符编码与字符集的区别(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/

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