字节与字符,字符与字符集

1.先转载两篇关于字符和字符集的文章,很全面且详细

(1)字符集和字符编码(Charset & Encoding)

(2)字符编码与字符集的区别

 

2.字节 Byte

字节是计算机存储容量的计量单位,比如一张图片占用的存储容量是3000字节

与字节密切相关的是比特bit,bit是数据传输的计量单位,我们知道1个字节占用8个二进制位,即【1Byte=8bit】

每个二进制位都有0和1两种状态,因此1字节的8个二进制位,能表示256种状态为,即2的8次方

那么大家平常说的1KB=1024B,1MB=1024KB,这里面的B指的是字节Byte

 

2.字符 Character 或者 Char

字符是我们生活中常见的一种符号,比如字母 a,它就是一个字符

一个汉字,比如 中国的“中”,它也是一个字符,并且我们电脑键盘上面的各种字母,标点符号等等都是字符

平常会听到有人说,1个中文字符占用2个字节,1个数字或者英文字符占用1个字节

对于这种说法,其实没有什么对错之分,如果他能帮你理解字符和字节的区别,你这样记着未尝不可

 

3.字符集

上面说字母 a,就是一个字符,那么 alibaba 则组成了一个字符串

但字符串,并不是字符集,这到时要严格区分

我的理解是:字符集就是用来实现字节与字符之间的映射而产生的,为什么这么说呢

因为字节是计算机的容量的计量单位,而字符则是现实生活中的抽象,对于计算机而言

它是没办法直接理解字符的,因此要定义字符和字节之间的映射,那么字符集就是这样产生的,常见的字符集有

 

字符集每个字符占用字节数
ASCII1
UCS-22  (UCS 即 Unicode CharSet)
UCS-44
UTF-81-6  其中1个中文占2个字节
UTF-162-4
GB23121-2  其中1个汉字占2个字节
GB180301-4

 

所以我们再来看上面那句话:1个中文字符占用2个字节,其实不太对,要看你用的什么字符集

对于各种字符集无非是为了适用各种语言的需要,比如在美国使用ASCII字符集就够用了

因为 ASCII 每个字符用1个字节表示,而每个字节占8个二进制位,总共就有 256 种形态了,完全够用

但是对于中文来说,就不够用了,所以产生了GBK这种字符集

 

而我们学Java的都知道,JDK定义一个字符占用2个字节,其实就是UCS-2字符集

USC-2 因为1个字符占2个字节,能表示65536种形态,在全世界范围内,基本够用了

因此Java号称使用Unicode字符集编码字符,在任何地方都是通用的

 

同时,也有这样的定义

Double Byte Character  Set :DBCS 即双字节字符,始终使用2个字节表示一个字符,就是 UCS-2

Multi Byte Character Set:MBCS 即多自己字符,其实就是可变字节字符,因为不同的字符,占用的字节数可能不同

注意:除了 UCS-2 我们称之为双字节字符,其余都定义为 MBCS

 

4.字符编码

这又是一个容易混淆的概念,不过大体上把它当做字符集编码,也是没问题的

比如我们是GBK编码,或者UTF8编码,基本上就等同于GBK字符集或者UTF8字符集

我认为,字符编码是字符集的一种具体实现方式,你可以认为字符集是一种抽象的类,而字符编码则是具体的对象

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值