您的位置:首页 > 其它

扫盲:字符编码与字符集的区别(2010年10月9日修改)

2015-06-24 10:49 302 查看
近来学习字符编码,发现网络上总是把“字符集(Character Set)”与“字符编码(Encode)”搞混了,我也给弄得晕头转向。

  其实字符编码与字符集在本质上就是不同的东西。

  字符(Character)>

    一个文字就是一个字符。在计算机中,字符是用数字来表示的,不同的文字用不同的数字表示。

  字符集(Character Set)

    既然是“集”,也就是“集合”,“字符集”自然就是“一定量字符的集合”。

    一个字符集包含了固定数量的字符,如ASCII字符集包含A-Z、a-z、0-9、半角标点符号和特殊控制符号(如换行符)在内的128个字符。

  字符编码(Encode)

    编码,意思是指将数据通过一定方式表达或储存,这个方式就叫编码。所以字符编码就是字符的表现、储存方式,也就是字符集的实现方式

    但需要注意的是:有的字符编码和字符集的名称是一致的

  从上可以看出,字符集是字符的集合,字符编码是把字符集的实现方式。

  字符集类型

    先看下字符的表达方式。看下表。

字符编码每个字符字节数
ASCII1
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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: