几种常用的编码方式

更新日期: 2019-06-13阅读: 9k标签: 编码

最近在做加解密这块的开发,使用频率最高的就是 Nodejs 的 crypto 模块了,中间出现了很多种不同的编码方式。一直对这些编码方式处于熟练拼写的状态,但是到底有什么区别处于一知半解,借此机会正好整理下这之间的关系。


BINARY

这个应该不用介绍了,在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0)。每一个二进制位( bit )有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节( byte )。


ASCII

因为计算机处理的数据是用二进制表示,例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了 ASCII 编码,统一规定了常用符号用哪些二进制数来表示。

ASCII 码一共规定了128个字符的编码, 字符 ascii 码对照表 。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的一位统一规定为0。


UNICODE

因为计算机只能处理二进制,如果要处理文本,就必须先把文本转换为二进制才能处理。最早的计算机在设计时采用8个比特( bit )作为一个字节( byte ),所以,一个字节能表示的最大的整数就是255(二进制11111111 = 十进制255),0 - 255被用来表示大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。 如果要表示中文,显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了 GB2312 编码,用来把中文编进去。 类似的,日文和韩文等其他语言也有这个问题。为了统一所有文字的编码, Unicode 应运而生。 Unicode 把所有语言都统一到一套编码里,这样就不会再有乱码问题了。


UTF-8

UTF-8(8-bit Unicode Transformation Format) 是一种针对 Unicode 的可变长度字符编码,又称万国码,由 Ken Thompson 于1992年创建。现在已经标准化为 RFC 3629 。UTF-8用1到6个字节编码 Unicode 字符。用在网页上可以统一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。

UTF-8 编码规则:如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的字节数,其余各字节均以10开头。 UTF-8 转换表表示如下:

`Unicode`符号范围(十六进制)bit数UTF-8编码方式(二进制)byte数

0000 0000-0000 007F

0~7

0xxxxxxx

1

0000 0080-0000 07FF

8~11

110xxxxx 10xxxxxx

2

0000 0800-0000 FFFF

12~16

1110xxxx 10xxxxxx 10xxxxxx

3

0001 0000-0010 FFFF

17~21

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

4


BASE64

所谓 Base64 ,就是选出64个字符: 小写字母 a-z 、大写字母 A-Z 、数字0-9、符号"+"、"/"(再加上作为垫字的"=",实际上是65个字符)作为一个基本字符集。然后,其他所有符号都转换成这个字符集中的字符。

具体来说,转换方式可以分为四步。

  • 第一步,将每三个字节作为一组,一共是24个二进制位。
  • 第二步,将这24个二进制位分为四组,每个组有6个二进制位。
  • 第三步,在每组前面加一组00,扩展成32个二进制位,即四个字节。
  • 第四步,根据 下面的 base64 编码索引表,得到扩展后的每个字节的对应符号,这就是 Base64 的编码值。

如果只有两个字节 按照上面的规则,将16位划分为三组,最后一组除了前面加一组00,末尾也加一组00,按照索引表得到编码值后,在末尾加上一个 = .

如果只有一个字节 按照上面的规则,将8位划分为两组,最后一组除了前面加00,末尾加两组00,按照索引表得到编码值后,在末尾加上两个 = .

Base64 编码索引表

   0 A  17 R   34 i   51 z

  1 B  18 S   35 j   52 0

  2 C  19 T   36 k   53 1

  3 D  20 U   37 l   54 2

  4 E  21 V   38 m   55 3

  5 F  22 W   39 n   56 4

  6 G  23 X   40 o   57 5

  7 H  24 Y   41 p   58 6

  8 I  25 Z   42 q   59 7

  9 J  26 a   43 r   60 8

  10 K  27 b   44 s   61 9

  11 L  28 c   45 t   62 +

  12 M  29 d   46 u   63 /

  13 N  30 e   47 v

  14 O  31 f   48 w   

  15 P  32 g   49 x

  16 Q  33 h   50 y


HEX

十六进制的简写, 在数学中是一种逢16进1的进位制。一般用数字0到9和字母A到F表示,其中:A~F 相当于十进制的 10~15 ,这些称作十六进制数字。 例如十进制数57,在二进制写作111001,在16进制写作39。


链接: https://www.fly63.com/article/detial/3688

彻底理解编码

不管是爬虫获取的,浏览器收到的还是从本地硬盘读取的,都是二进制,选择正确的编码类型,才能把二进制或者说01序列解析为正确的字符。也就是用何种方式解析01数字

JavaScript中常见的5种不良编码习惯

在这篇文章中,我描述了JavaScript中常见的5种不良编码习惯。重要的是,本文会给出一些可行的建议,如何的摆脱摆脱这些习惯。

jquery选择图片url转base64编码

之前一次使用post请求上传图片过多,post请求理论上对参数的大小没有限制,但是服务器有限制,导致上传失败,这时设置一下Tomcat的server.xml里面的maxPostSize就可以了。不过还是建议使用Form表单提交文件

这6种编码方法,你掌握了几个?

Don Roberts 提出的一条重构准则:第一次做某件事时只管去做;第二次做类似的事时会产生反感,但无论如何还是可以去做;第三次再做类似的事时,你就应该重构

网页编码:UTF-8、GB2312

通过改变charset=utf-8中的utf-8就可以改变网页的编码。 一般我们在写CSS文件时候也需要在CSS文件顶部使用@charset utf-8;来定义此CSS文件编码类型。一般html源代码和css文件编码要统一,如果不统一会导致CSS hack

读懂Base64编码

我们知道一个字节可表示的范围是 0 ~ 255(十六进制:0x00 ~ 0xFF), 其中 ASCII 值的范围为 0 ~ 127(十六进制:0x00 ~ 0x7F);而超过 ASCII 范围的 128~255

Unicode 和 UTF-8 是什么关系?

十几年前,国内 UTF-8 还不太流行,新手开发过程中,乱码问题是很常见的。记得我刚毕业那会,公司的系统是这样的:数据库 MySQL 使用的是 Latin-1 编码(IOS8859-1)

Base64编码知识详解

在我们进行前端开发时,针对项目优化,常会提到一条:针对较小图片,合理使用Base64字符串替换内嵌,可以减少页面http请求。并且还会特别强调下,必须是小图片,大小不要超过多少KB,等等。

Get 一种可以用来装逼的 JavaScript 编码风格

JavaScript 是弱类型的编程语言,我们在写代码的时候充斥着大量的类型转换,在我之前的文章 【JS进阶】你真的掌握变量和类型了吗 中有过相关的介绍,其实上面代码的核心就是用到了下面三个类型转换:

前端常见的字符编码方案

在前端开发中,最常见的字符编码方案是 UTF-8。UTF-8是一种可变长度的 Unicode 编码方案,可以表示几乎所有的字符,并且与 ASCII 兼容。由于互联网的广泛应用和多语言的支持

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!