字符集与编码的区别

最近因为工作需要,需要做关于byte的处理工作,期间遇到了编码问题,于是上网搜了一把,下面这篇文章是我对编码的了解程度写的总结,本人水平有限,还望各位不惜赐教。

 

字符集和编码的区别:字符集是一个字符和数字的对应表;编码是指这些字符对应的数字在计算机中如何保存。

ASCII,GB2312,GBK,GB18030,BIG5这些字符集的字符对应的数字,跟编码的数字是一样的,所以都可以认为他们的名称即代表字符集也代表编码。但是有一个例外,就是unicode字符集,因为各种原因,unicode有3种编码,下面将说明。

 

ASCII

ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。(from 百科)

 

GB2312,GBK,GB18030

中国编制的汉字字符集,通过扩展ASCII字符集来实现的,他们包含的汉字数量是GB2312 < GBK < GB18030,这3种字符集除了包含ASCII字符,还包含数学符号、罗马希腊的字母、日文的假名。要注意的是,GB2312和GBK是固定2个字节,但是GB18030跟utf-8一样是变长度的(1-4字节),并且GB18030还包含中国少数民族的字符。这3种字符集因为各自的编码只有1种,所以通常我们都认为他们的名称即代表字符集也代表编码。在操作系统中,这些编码统称为ANSI编码。

 

unicode

(统一码、万国码、单一码)是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。unicode的每个字符用2个字节表示其字符映射的标识。比如"码"这个字符,unicode码是0x7801。unicode字符集默认的编码是utf-16,假如你在程序里指定编码是unicode,实际上是使用utf-16。在Java中,用\uxxxx这种格式表示unicode。

 

ANSI编码

unicode和ANSI都是字符代码的一种表示形式。为使计算机支持更多语言,通常使用 0x80~0xFF 范围的 2 个字节来表示 1 个字符。比如:汉字 '中' 在中文操作系统中,使用 [0xD6,0xD0] 这两个字节存储。不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。(from 百科)

 

utf-8编码

utf编码是专为unicode设计的传输格式,比如在网络上传输,你从文件里把内容读到程序里也是传输,都可以用到它。顾名思义,UTF-8就是每次8个位传输数据,而UTF-16就是每次16个位,如此类推,还有个编码是utf-32。unicode字符集默认的编码是utf-16,并且跟unicode字符映射表一一对应,比如上面的"码"字,utf-16也是用0x7801来保存。所以utf-16是固定2个字节的,这让用英文的人很不高兴,本来用1个字节就能搞定的abcd字符,utf-16却要用2个字节来保存。于是utf-8出现了,这是一种可变长度的编码,它的长度范围是1-6字节,ASCII字符仍然用1字节表示,汉字用3个字节表示,比起GB2312,GBK,GB13030等汉字编码多了1个字节,我想这就是很多中文网站仍然用GB编码的原因吧。另外,正确来说utf-8最多是4字节(1 ASCII, 2 希腊字母, 3 汉字, 4 平面符号),因为后面2个字节在unicode里还没定义任何字符。

utf-8,utf-16,utf-32是unicode准备的3套编码方案,最常用的是utf-8。

 

因此,我们编程中只要使用编码就行了,但是字符集这个概念我们同样需要了解。

 

 

参考文章:

说说字符集和编码

Java的中文处理学习笔记:Hello Unicode

关于unicode,mbcs,utf8,charset,encoding等相关概念的说明

字符集与编码[下]

字符集与编码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值