编码

编码和解码

  1. 字符和字节之间经过编码与解码的方式相互转换
  2. 最基本的字节为ascii码和unicode码,unicode包括ascii码,可以表示更多的字符,unicode通常用两个字节表示一个字符
  3. 如utf-8 ,某个字符对应的unicode码为两个字节,但可以转换为多个字节utf-8的表示,然后根据这种表示,映射到对应的字符;故当字节数据不符合utf-8格式,则根据该数组转换字符时,会出现不可映射字符;
  4. 一般编码中,不可映射字符会用一个固定的字符来表示,故当字节数据转换为字符后,且字符中存在不可映射字符,该字符串无法被映射为原本的字节数据
  5. 当字符串可以正确的保存为字节后,如成功的保存为文件;则该文件无论以何种编码方式进行编码,都可以进行乱码后的恢复
  6. unicode兼容ascaii码,对于ascaii码,等同于没有编码规则

Unicode编码

  1. Unicode为世界上所有字符都分配了一个唯一的数字编号,这个编号范围从 0x000000 到 0x10FFFF(十六进制),有110多万,每个字符都有一个唯一的Unicode编号,这个编号一般写成16进制,在前面加上U+。例如:“马”的Unicode是U+9A6C。
  2. Unicode码只是一种映射关系,等同于一种概念抽象,实际的存储以unicode码为基础,有多种实现,每种实现的存储形式各不相同;故gbk格式存储的文档不可以直接转换为utf-8格式
  3. Unicode就相当于一张表,建立了字符与编号之间的联系
  4. unicode使用两个字节表示字符的一种映射关系,只规定了每个字符的数字编号是多少,并没有规定这个编号如何存储。
  5. 编号到二进制有多种方案:主要有UTF-8,UTF-16,UTF-32,gbk等
  6. utf-8:
    1. UTF-8就是使用变长字节表示,顾名思义,就是使用的字节数可变,这个变化是根据Unicode编号的大小有关,编号小的使用的字节就少,编号大的使用的字节就多。使用的字节个数从1到4个不等。
    2. 英文一个字节,中文三个字节,存在部分字符使用四个
  7. UTF-16使用变长字节表示
    1. 对于编号在U+0000到U+FFFF的字符(常用字符集),直接用两个字节表示。
    2. 编号在 U+10000到U+10FFFF之间的字符,需要用四个字节表示
  8. UTF-32
    1. 用四个字节表示,处理单元为四个字节(一次拿到四个字节进行处理)
  9. gbk 使用2个字节

ASCII码介绍

  1. ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。
  2. 到目前为止共定义了128个字符
  3. 用于将字符转换未二进制码
  4. ASCII 码使用指定的 7 位或 8 位二进制数组合来表示 128 或 256 种可能的字符。标准 ASCII 码也叫基础ASCII码,使用 7 位二进制数来表示所有的大写和小写字母,数字 0 到 9、标点符号, 以及在美式英语中使用的特殊控制字符
  5. 通过一种通用的标准,使信息可以传入,一种二进制序列会被 识别未相同的结果
  6. ASCII码表大致可以分三部分组成:
    1. ASCII非打印控制字符
      1. ASCII表上的数字0–31分配给了控制字符,用于控制像打印机等一些外围设备。例如,12代表换页/新页功能。此命令指示打印机跳到下一页的开头。(参详ASCII码表中0-31)
    2. ASCII打印字符
      1. 数字 32–126 分配给了能在键盘上找到的字符,当您查看或打印文档时就会出现。数字127代表 DELETE 命令。(参详ASCII码表中32-127)
    3. 扩展ASCII打印字符
      1. 扩展的ASCII字符满足了对更多字符的需求。扩展的ASCII包含ASCII中已有的128个字符(数字0–32显示在下图中),又增加了128个字符,总共是256个
      2. 拓展的部分,不同国家的实现不相同
      3. 汉字使用了两个字节,仅256位不够使用(详见百科)
  7. ascii码可以直接等同于字符使用,Unicode码需要具体的编码实现;char类型的值可以直接赋值ascii码值来表示对应的英文字符

BASE64介绍

  1. 由于某些系统中只能使用ASCII字符。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法。(如unicode码)
  2. 可以将ascaii码中的拓展部分转换位基础通用部分(当信息在不同位置传输时,若部分机器对不可见字符的处理不同,会造成信息的失效)
  3. base64特别适合在http,mime协议下快速传输数据。
  4. Base64编码方法要求把每三个8Bit的字节转换为四个6Bit的字节,其中,转换之后的这四个字节中每6个有效bit为是有效数据,空余的那两个 bit用0补上成为一个字节。
  5. 会将原数据扩大三分之一

转换为16进制

  1. 对于生成的字节数组,一个字节转换为两个16进制的表示,长度可能会扩大一倍、
  2. 可以将无法表示的字节数组转换为可以表示的形式(加密生成的字节数组,不按照编码规则,无法生成文字)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值