技术咸鱼 技术咸鱼
首页
  • 《Django教程》
  • 《VuePress教程》
应用
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 网站
  • 资源
  • Vue资源网站
  • Flutter资源网站
  • 分类
  • 标签
  • 归档
关于
头像

公众号:技术咸鱼
首页
  • 《Django教程》
  • 《VuePress教程》
应用
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 网站
  • 资源
  • Vue资源网站
  • Flutter资源网站
  • 分类
  • 标签
  • 归档
关于
  • 网络架构

  • 计算机知识

    • 编码解码Encoding&Decoding
    • 编码规范
      • 编码解码Encoding&Decoding
      • 字符和字节
        • 字节
        • 字符
      • 编码规范
        • 字符集
        • 字符编码
        • ASCII
        • Unicode
        • Base64
        • URL编码
    • 加密解密
  • java

  • Android高级
  • 计算机知识
技术咸鱼
2020-01-12

标题 编码规范

# 编码解码Encoding&Decoding

在介绍编码规范之前,我们先了解几个概念

编码解码Encoding&Decoding

# 字符和字节

# 字节

  • 字节:是计算机存储的一种计量单位.我们知道计算机只能识别0和1组成的二进制数,一个数据就是一bit(位),为了统一计算,我们规定8个bit(位)就是一个字节,也就是我们常用的byte.

# 字符

  • 字符:可以理解我们现实中见到的每个单个英文,中文,数字,特殊符号,emoji表情等我们能用输入法打出的东西就是字符.

需要注意的是英文,中文,数字,特殊符号,emoji在每种编码中占的字节数可能不一致,同一个字符在不同的编码中也不一样, 如在GBK编码中一个汉字占2个字节,在UTF-8编码中一个汉字占3个字节.

随着技术的发展,我们越来越多的需要计算机现实字符,但是计算机只能识别0和1二进制数,于是就出现了编码规范

# 编码规范

为了现实字符,国际组织就制定了编码规范,希望使用不同的二进制数代表不同的规范,这样支持编码规范的计算机就能根据二进制数显示出字符了. 每套编码规范都有其使用场景,比如,GBK(国标)就是为了解决早期计算机不支持中文,由中华人民共和国全国信息技术标准化技术委员会1995年12月1日制订的一套编码规范。 为了更好的了解编码规范,下面我们介绍下编码规范中的2个子概念

# 字符集

字符集:就是很多个字符集合,例如 GB2312是简体中文的字符集,它收录了六千多个常用的简体汉字及一些符号,数字,拼音等字符.

# 字符编码

字符编码:是字符集的一种实现方式,把字符集中的的字符映射为特定的字节或者字节序列. 如Unicode是字符集,UTF-8,UTF-16,UTF-32是字符编码规则

常见的字符集有 ASCII,GBK,Unicode 常见的字符编码有 UTF-8,UTF-16 EUC-CN等

下面简单介绍写ASCII

# ASCII

ASCII (American Standard Code for Information Interchange):美国信息交换标准代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言.它是最通用的信息交换标准,并等同于国际标准 ISO/IEC 646,ASCII第一次以规范标准的类型发表是在1967年.最后一次更新则是在1986年,到目前为止共定义了128个字符.

标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母, 数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符.

  • 0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符).

  • 在英语中,用128个符号编码便可以表示所有,但是用来表示其他语言,128个符号是不够的,这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号.

  • 所有引申的ASCII编码方式中,0--127表示的符号是一样的,不一样的只是128--255的这一段.

  • ASCII中一个字节对应一个字符]

    ASCII字符代码表

# Unicode

Unicode是为了解决不同国家,不同的文字系统就要使用不同的编码标准过多,处理混乱的问题, 是现在最通用的一种编码规范,也称万国码.

现在大家最常用的是utf8,

注:不同字符编码规则不一样,字节范围也不一样,如果随便指定byte数组进行编码然后解码,则最终结果不一定如预期,产生乱码.

# Base64

Base64就是一种基于64个可打印字符来表示二进制数据的编码方法.Base设计的初衷是为了满足某些场景(如电子邮件等)不能直接使用ASCII码字符的情况,现在主要是在http 协议上传输较长的文本信息,他是将用户输入的二进制文件打包成一种安全的格式.

Base64要求把每三个8Bit的字节转换为四个6Bit的字节(38 = 46 = 24,然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3.

Base64编码的规则:

  • 把3个字节变成4个字节
  • 每76个字符加一个换行符
  • 最后的结束符也要处理
  • 其实还有一个垫字的"=",实际上是65个字符

Base64编码的用途:

  • 1,让二进制数据可以通过字符串表达和传输等,如图片
  • 2,简单的加密

# URL编码

使用URL在网络中定位资源,就需要兼容不同协议和语言,因此需要统一URL的命名规范,以避免在传输过程中发生数据丢失问题,这就出现了URL编码

URL编码遵循下列规则: 每对name/value由&;符分开;每对来自表单的name/value由=符分开.如果用户没有输入值给这个name,那么这个name还是出现,只是无值.任何特殊的字符(就是那些不是简单的七位ASCII,如汉字)将以百分符%用十六进制编码,当然也包括象 =,&;,和 % 这些特殊的字符.其实url编码就是一个字符ascii码的十六进制.不过稍微有些变动,需要在前面加上“%”.比如“\”,它的ascii码是92,92的十六进制是5c,所以“\”的url编码就是%5c

URL编码作用:

  • 1,消除歧义,避免解析错误.如:搜索的字符中包含&
  • 2,兼容不同语言,对非英文的字符进行转换,防止不同地区的语言识别不了.
#编码规范
上次更新: 2023/04/21, 11:08:33
编码解码Encoding&Decoding
加密解密

← 编码解码Encoding&Decoding 加密解密→

最近更新
01
PersistentEnumerator storage corrupted
04-23
02
Could not resolve com.android.tools.build:gradle:7.4.2.报错
04-01
03
加密解密
02-23
更多文章>
Copyright © 2019-2023 oopanda | 皖ICP备19017961号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×
document.write('');
×