编码的简单总结

说明

字符及网络上常用编码

编码 目的 前缀或特点 编码形式 常见或特殊记忆
url编码 对ascii中的一些可打印字符进行编码 前缀% 以%为前缀,其后是字符的两16进制的ascii码 %20空格 %00空字节 %25百分号 +也代表url的空格
html编码 为在html文档中安全的使用某些字符 &或&#或&#x 后跟字符10进制的ascii码,&#x为前缀,后跟字符的16进制的ascii码 "为&quot或&#34或&#x22 >为&gt <为&lt
uuencode编码 将二进制文件转换为文本文件,便于纯文本email传输 只有可打印字符串,从10进制ascii码33-96,即明显没有小写字母中括号等
16进制编码 对二进制数据进行16进制编码
base64 对二进制数据进行编码,用来将非ASCII字符的数据转换成ASCII字符 末尾经常出现= 大写字母AZ,小写字母az,数字0~9以及"+","/"及用来填充的=
base32 对二进制数据进行编码,用来将非ASCII字符的数据转换成ASCII字符 末尾经常出现= 大写字母AZ和数字27及用来填充的=
base16 对二进制数据进行编码,用来将非ASCII字符的数据转换成ASCII字符 数字09和字母AF
unicode 对世界所有的字符编码 U+ 用四个字节为每个字符进行编码,一般用16进制字符表示
utf8 把unicode字符进行编码,便于存储传输的编码方式 % 使用一至四个字节为每个字符编码
utf16 把unicode字符进行编码,便于存储传输的编码方式 %u 使用二或四个字节为每个字符编码
utf32 把unicode字符进行编码,便于存储传输的编码方式 %u 使用四个字节为每个字符编码
ascii码 对键盘的128个字符编码 使用7位二进制数来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符
gbk 对中文字符编码 使用两个字节编码
bcd码 对二进制数据进行编码 用4位二进制数来表示一位十进制数中的0~9十个数码,有8421码,2421码,余3循环码等方式
quoted-printable编码 在邮件扩展标准中用于对非ascii字符或二进制文件(图片视频等) = 每一个8位字节编码为一个=号后跟两个十六位数,根url编码差不多,只不过前缀为=
敲击码 对26个英文字母编码 将26个字母放在5*5的矩阵中(k和c放在一起),比如用(1,1)代表A,(1,5)代表E
摩尔斯电码 . - 用. -的不同组合顺序表示字母,数字,标点符号,并用停顿区分单词,句子

数字信号编码

非归零编码NRE——高低电平分别用0和1表示

曼彻斯特编码——从高电平跳到低电平表示0,从低电平跳到高电平表示1

差分曼彻斯特编码——每一位中间有跳变,用来表示时钟,每一位开始时有跳变表示0,无表示1

其它常见编码

霍夫曼编码

用于压缩,MP3编码等
简单的二元霍夫曼编码过程如下

所以e的编码为1,c的编码为01,f的编码为000,h的编码为001

费诺编码

简单的二元费诺编码过程如下,不断分为概率相近的两组

游程编码

用于卫星,医学图像等的编码,利用游程,例如图像像素为
3333
4333
2211
1111
灰度:3,4,3,2,1,1
长度:4,1,3,2,2,4
灰度用两位,长度用两位为1011,1100,1010,0101,0001,0011

差错控制码

奇偶校验码

增加一位奇(偶)校验位并一起存储或传送
比如:1111000中1位偶数添加一位为0表示1的位数为偶数,变为11110000,如果传输过程中发生了错误变为10110000,那么就可以知道有一位发生了错误。如果偶数个位错误,是无法发现的

循环冗余码crc

一个k位的二进制数据,左移r位,除以一个给定的r+1位的多项式相除,得到的r位余数就为校验码,拼到k位的二进制数后面
只要将接受到的数据和校验位用约定好的同样的生成多项式除,如果能除尽,表明没有发生错误(不一定,也有可能错误);若除不尽,则表明某些数据位发生了错误
如信息码为1100,生成多项式为(x^{3}+x+1)
则1100平移3位1100000 除以1011,余数为010,拼在1100后面为1100010

海明校验码

能够纠正一位错误或者检测两位错误并纠一正位错误
设信息码为k位,校验码为r位,海明码为k+r位
如果能够纠正一位错则应满足(2^{r}-1geq k+r)
如果能够发现两位错并纠正一位错则应满足(2^{r-1}geq k+r)
编码规律为

  • 每个校验位(p_{i})放在海明码中位号为(2^{i-1})的位置
  • 海明码的每一位(数据位和校验位)由多个校验位进行校验:被校验位的位号=校验位位号之和

例如求01101110的海明码,使其能纠正一位错误
一 确定校验位数
(2^{4}-1geq 8+4) 所以r为4
二 确定校验位所在位置
(2^{1-1})(2^{2-1})(2^{3-1})(2^{4-1})所以海明码的1,2,4,8为校验位
三 分组

四 确定校验位
每一组除本身校验位外,所有位异或,如第一组为({D}_{7} oplus{D}_{6} oplus{D}_{4} oplus{D}_{3} oplus{D}_{1}={1})
四个校验码分别为1101,所以海明码为110011011110
五 校验
将每一组与本组的校验位异或,即({P}_{1} oplus{D}_{7} oplus{D}_{6} oplus{D}_{4} oplus{D}_{3} oplus{D}_{1}),如果校验位都为0,则无错,如果有错,校验位二进制编码即为出错位号,如,如果校验位为1010,则第第10位错,即({D}_{2})出错

原文地址:https://www.cnblogs.com/Qi-Lin/p/12230019.html