字符与字节

一、相关概念的理解

字符:人类用来记录和表达数据、信息以及事物的一种符号的最小单元。比如‘a’是一种符号,称为字符;‘我’也是一个符号,称为字符;甚至于‘!’是一个符号,也能称为一个字符。

字节:计算机用来存储数据的最小存储单元。表现为一个8位的二进制数字:00000000(一般用十六进制表示为0x00),是一个很具体的存储空间。

字符集:字符的集合就称之为字符集

unicode字符集:万国码。几乎收录了世界上所有语言的字符,并使用序号将其一一对应起来

unicode字符:每一个字符在unicode字符集中对应的序号。

编码标准:一种让计算机以字节形式存储字符集序号或者字符集序号的方法。比如unicode字符集对应的编码标准有UTF-8,UTF-16等等。规定了所属字符集种每个字符或者每个字符序号对应的字节存储的方式。

容易混淆的地方:各个国家和地区在指定编码标准的时候,一般是编码标准和字符集同时制定的,因此,我们通常所说的‘GB2312’、‘GBK’等等,除了有编码标准这层意思之外,也代表着这种编码标准所对应的字符集


二、为什么会有UTF-8的编码标准?

    前面提到,计算机存储字符的时候,实际存储的是字符在字符集中对应的序号。那么比如有一个字符的序号是8,计算机是不会直接存储8的,就算将8转换成二进制1000也不行。因为字节是计算机实际存储数据的最小单元,所以,计算机如果要存储这个序号8,实际上存储的是00001000。这种转换的方式就称之为一种编码标准。

    在unicode字符集中,每一个字符的序号,通常是用两个字节能存储的的数字来表示的(也有多个字节的,但是很少很少,本文不做讨论)。比如字符‘0’unicode字符集对应的序号48,如果使用unicode编码(不是unicode字符集)表示为0000 0000 0011 0000(16进制表现为0030),可以发现,前8位都是没有意义的,这样一来,很容易造成一种存储空间浪费的情况。比如计算机如果要按照unicode字符集存储‘1000’这个字符串,需要8个字节才能存储,而如果按照ascii字符集进行存储,只需要4个字节。unicode对于数字和英文字符的存储,空间占用量量整整大了一倍。

    但是,unicode字符集能提供ascii字符集所不能提供的中文字符、蒙古文字符、等一系列字符的序号。也就是说,unicode字符集是很好用,很通用的,它将全世界的字符都进行了收录并编了序号。但是但是!!unicode编码是很不好用的,因为对于使用英文的国家,很浪费计算机的存储空间。

    为了调协这个矛盾,基于节省计算机的存储空间,一种新的编码标准出现了,称之为UTF-8。

    首先明确一个概念,UTF-8编码标准是一种将unicode编码中字符的序号存储在计算机上的一种方法。如果说unicode是一本字典,那么UTF-8可以理解为一种查询字典的方式。

    UTF-8的编码标准可以在网上具体搜索一下,这里不在赘述。


三、base64编码

    明确一个概念,base64编码的对象,也就是说,base64的操作对象是字节,也就是二进制数据。base64是将二进制数据转换成二进制数据,对于数据的类型没有改变!!!

    原理:有一组2进制数据11111111 11111111 11111111。字节数为3个字节

    base64转换的时候,将其均分成四组111111 111111 111111 111111

    然后最高两位补0,变成四个字节00111111 00111111 00111111 00111111

    最后,根据base64字符集,将每一个单字节转换成字符,这样,就完成了base64的编码。

    可以发现,如果二进制数据的字节数是3的倍数,就很好办,但是如果一组二进制数据不是三的倍数,而是除以3后余1或者余2怎么办?

    这里可以将这组二进制数据补0,即00000000这个字节,强行构成3的倍数,然后,在单字节转换成字符的时候,补充了多上个0字节,就在字符尾部加上多少个‘=’号。

    

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值