编码方式和字符集理解

(1)概念

    位(bit):数据存储的最小单位。位,简记为b,也称为比特,每个01就是一个位(bit)。计算机中的CPU位数指的是CPU一次能处理的最大位数。

    字节(Byte)8 bit就称为一个字节(Byte)

 

(2)ASCII(美国信息交换标准代码,AmericanStandard Code for Information Interchange

    如今使用的所说的ASCII码实际是由基础ASCII和扩展ASCIIIBM扩展字符集)组成的。

    基础ASCII又称标准ASCII,使用7位二进制数来表示所有的大写和小写字母,数字09、标点符号,以及在美式英语中使用的特殊控制字符,总共有128个。但是ASCII码是用一个字节来存放的,一个字节是8位,多余一位用作检查编码出错的奇偶较验位。

    扩展ASCII码是在原有的7位上加了一位,变成8位,形成扩展ASCII字符集。扩展ASCII字符集包含2^8=256个字符,并且其中的前128个字符与原来的ASCII字符集相同(就是原来的ASCII字符集的7位编码前面加一个0),而后面128个字符高位都是1。后128个字符用来表示附加的128个特殊符号字符、外来语字母和图形符号。

 

(3)Unicode

       Unicode中每个字符都是16位宽,可以代表2^16=25536个字符。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。但是值得注意的是Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。所以Unicode有了不同的编码方式,包括UTF-8UTF-16UTF-32等。Unicode中每个字符都是16位宽,所以8位的值在Unicode中是没有意义的。

 

(4)ANSI编码(AmericanNational Standards Institute,美国国家标准学会的标准码)

       ANSI码:为使计算机支持更多语言,通常使用0x80~0xFF(即128 - 256)范围的 2个字节来表示 1个字符。比如:汉字''在中文操作系统中,使用 [0xD6,0xD0]这两个字节存储。对于ANSI编码而言,0x00~0x7F之间的字符,依旧是1个字节代表1个字符。这一点是ANSI编码与Unicode(UTF-16)编码之间最大也最明显的区别。

不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS等各自的编码标准。这些使用2个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表GB2312 编码,在日文操作系统下,ANSI编码代表 JIS编码。不同 ANSI编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。 当然对于ANSI编码而言,0x00~0x7F之间的字符,依旧是1个字节代表1个字符。这一点是ASNI编码与Unicode编码之间最大也最明显的区别。

 

(5)双字节字符集(DBCS 
    最初的128个代码是ASCII,较高的128个代码中的某些总是跟随著第二个位元组。这两个位元组一起(称作首位元组和跟随位元组)定义一个字元,通常是一个复杂的象形文字。

Unicode使用(特别在C程式设计语言环境里)宽字元集。Unicode中的每个字元都是16位元宽而不是8位元宽。在Unicode中,没有单单使用8位元数值的意义存在。相比之下,在双位元组字元集中我们仍然处理8位元数值。有些位元组自身定义字元,而某些位元组则显示需要和另一个位元组共同定义一个字元。

 

ASCII、ANSI、DBCS中两个字节存储的字符,它们的两个字节都可以分解,可以代表不同的意思,合起来才代表一个字符。

Unicode中单个字节是没有意义的,它的最基本的字符都有16位宽。

 

初识编码,有写的不对的地方,请指证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值