网络标准之:IANA定义的传输编码
简介
不同的系统或者协议可以接受的数据类型是不同的,如果要在那些不支持现有数据格式的系统或者协议中进行数据传输的话,就需要进行数据转换。
IANA的全称是The Internet Assigned Numbers Authority,也叫做互联网数字分配机构,是一个负责协调互联网的事务让Internet正常运作的机构。它定义了几个transfer encodings方式。
今天将会给大家详细讲解这几种方式的由来和使用场景。
IANA的传输编码方式
根据IANA的定义,有下面几个transfer encodings方式:
| Name | Reference |
|---|---|
| 7bit | [RFC2045] |
| 8bit | [RFC2045] |
| binary | [RFC2045] |
| quoted-printable | [RFC2045] |
| base64 | [RFC2045] |
这些传输编码方式都是什么意思呢?接下来一一讲述。
7bit
我们知道计算机的第一个字符编码就是ASCII编码,它表示的范围是从0到127。一个字节是8位,0到127意味着ASCII编码只使用7bits,这也就是7bit的由来。
对于有些协议或者系统来说,他们只支持ASCII编码,如果传输的数据范围超过了7bit,则会出现异常。
8bit
7bit在使用中有很大的限制,因为对于常用的Unicode编码来说,通常会使用2-4个字节作为信息的载体,如果是7bit的话,就会导致信息接收的不完整,从而失去数据原有的意义。
8bit的意思是,可以接收整个8bit的数据,也就是说数据可以按整个字节来传输。这样就没有传输的限制了。所以说8bit的应用会更加广泛,如果一个系统可以正确的接收8bit,那么我们可以称这个系统为8-bit clean 。
binary
是不是8bit就可以适用于所有的系统呢?我们要知道,8bit是按字节来进行传输的。所以对于格式更加紧凑的二进制流的话是不适用的。所以有一个专门的二进制消息格式binary来处理二进制信息。
quoted-printable
如果数据是binary格式的,但是系统又不支持binary格式该怎么办呢?
这时候我们就需要将binary转换成为text格式,这种转换叫做Binary-to-text encoding。其中quoted-printable和base64就是两种转换方式。
对于quoted-printable来说,就是将一个8-bit数据用7bit可读的字符来表示。虽然7bit可以表示0-127的范围,但是其中只有33 到 126是可读字符,其他的都不是可读字符。
那么quoted-printable是怎么转换的呢?
quoted-printable中,任何 8 位字节值都可以用 3 个字符来进行编码。=后面接两个16进制的数字。
比如对于ASCII的换页符12来说,转换过来就是=0C。 因为=是特殊的字符,所以等号也需要转义成=3D来表示。
对于可打印的ASCII字符,也就是33到126之间的十进制值,则不需要转义,直接表示他们自己即可。
ASCII 制表符和空格字符、十进制值9和32可以由它们自己表示,除非这些字符出现在编码行的末尾。在这种情况下,它们需要转义为=09(制表符)或 =20(空格),或者后跟 =(软换行符)作为编码行的最后一个字符。
另外Quoted-Printable 编码数据的一行不得超过76个字符。如果超出的话,可以根据需要添加软换行符。软换行符是由在编码行末尾添加=组成,软换行符不会在解码文本中显示为换行符。
base64
除了quoted-printable之外,还有一种常用的Binary-to-text encoding方式,叫做base64。
base64的原理是通过一个映射表,将二进制编码映射成为64个字符(26个小写字母+26个大写字母+10个数字+加号和斜杠)。
每个Base64字符可以表示6bits的数据,所以3个字节的数据可以用6个Base64字符来表示。
其映射表如下:

总结
以上就是IANA介绍的几种传输编码格式,大家学会了吗?
本文已收录于 http://www.flydean.com/13-transfer-encodings/
最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!
网络标准之:IANA定义的传输编码的更多相关文章
- Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045-RFC2049,上面有MIME的详细规范.Base64编码可用于在HTTP环境下传递较长的标识信息.例如 ...
- 网络标准之:永远是1.0版本的MIME
目录 简介 MIME详解 MIME头 MIME-Version Content-Type Content-Disposition Content-Transfer-Encoding Encoded-W ...
- HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
题图:by @Olga Hi,大家好,我是承香墨影! HTTP 协议在网络知识中占据了重要的地位,HTTP 协议最基础的就是请求和响应的报文,而报文又是由报文头(Header)和实体组成.大多数 HT ...
- HTTP的传输编码(Transfer-Encoding:chunked)
转载自HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP,本来是将这篇文章收藏在我的有道云笔记的,但是今天复习的时候看着这个标题这尴尬,这里转载一下-... 什么是传输编码? 传输编 ...
- HTTP 协议中的 Content-Encoding 和 Transfer-Encoding(内容编码和传输编码)
转自:http://network.51cto.com/art/201509/491335.htm Transfer-Encoding,是一个 HTTP 头部字段,字面意思是「传输编码」.实际上,HT ...
- 标准JSON格式定义与解析注意点
标准JSON格式定义与解析注意点 在JS.IOS.Android中都内置了JSON的序列化.反序列化SDK.JEE中也可以使用第三方的JSON解析库,如GSON.虽然在JSON格式被定义出来的时候并没 ...
- 网络_OSI模型_数据包传输
2017年1月12日, 星期四 网络_OSI模型_数据包传输 1. 网络_源主机_局域网_交换机_路由器_目标主机 2. OSI7七层_TCP/IP精简 OSI 7层: 应用层 ...
- 【VBA】标准Sub/Function定义,带ScreenUpdating、On Error GoTo
[说明] 标准Sub/Function定义,带ScreenUpdating.On Error GoTo Sub AutoFillRole() '--------------- ERROR MSG--- ...
- ANSI 标准C 还定义了如下几个宏
ANSI 标准C 还定义了如下几个宏:_LINE_ 表示正在编译的文件的行号_FILE_ 表示正在编译的文件的名字预处理名称意义#define 宏定义#undef 撤销已定义过的宏名#include ...
随机推荐
- ApacheCN 捐赠名单 2019
这是 ApacheCN 的捐赠名单,不是龙哥盟博客的(关于 ApacheCN). 最新的名单请见 https://home.apachecn.org/donate/. 捐赠者 金额(元) 时间 收入类 ...
- AT2400 [ARC072B] Alice&Brown
通过打表后可以发现,当初始石头数 \(|X - Y| \le 1\) 时先手必败否则先手必胜. 我们考虑使用归纳证明这个结论,显然 \((1, 0), (1, 1)\) 时是成立的. 基于观察,我们可 ...
- JAVA之容器(转)
一.概览 容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表. Collection 1. Set TreeSe ...
- 认识Html DOM
1.认识HTML DOM HTML Document Object Model 即:超文本标记语言-文档对象模型 HTML DOM理解为网页的API.它将网页中的各个元素都看作一个个对象,从而使网页中 ...
- mac os 利用ssh 搭建git server服务器详细教程,以及git基本用法
详细讲mac 连接mac的git操作 首先在服务端上 第一:新建一个仓库 1, cd /Users/userName/projects 用linux命令进入一个你想要创建与他人共享的文件夹. 2,su ...
- axios请求配置
全局配置示例(在js文件配置): axios.defaults.baseURL = 'https://api.example.com'; axios.defaults.headers.common[' ...
- Spring系列12: `@Value` `@Resource` `@PostConstruct` `@PreDestroy` 详解
本文内容 @Resource实现依赖注入 @Value详细使用 @PostConstruct @PreDestroy的使用 @Resource实现依赖注入 前面章节介绍了使用@Autowired注入依 ...
- 如何在 Xamarin 中快速集成 Android 版认证服务 - 邮箱地址篇
Xamarin 作为微软提供的移动服务多系统开发平台,成为很多开发者首选的应用开发平台.AppGallery Connect(以下简称 AGC)也在逐步的支持 Xamarin 的 SDK.认证服务也是 ...
- docker 批量删除 none 镜像
在使用 docker images 命令的时候,经常会在列表中看到 <none>:<none> 的镜像. 这种镜像在 Docker 官方文档中被称作 dangling imag ...
- [BACKUP] Visual Studio Code 配置
0 VSCode 便携模式:https://code.visualstudio.com/docs/editor/portable#_enable-portable-mode 1. 字体 FiraCod ...