写点什么

网络标准之:IANA 定义的传输编码

作者:程序那些事
  • 2022 年 2 月 28 日
  • 本文字数:1394 字

    阅读完需:约 5 分钟

网络标准之:IANA定义的传输编码

简介

不同的系统或者协议可以接受的数据类型是不同的,如果要在那些不支持现有数据格式的系统或者协议中进行数据传输的话,就需要进行数据转换。


IANA 的全称是 The Internet Assigned Numbers Authority,也叫做互联网数字分配机构,是一个负责协调互联网的事务让 Internet 正常运作的机构。它定义了几个 transfer encodings 方式。


今天将会给大家详细讲解这几种方式的由来和使用场景。

IANA 的传输编码方式

根据 IANA 的定义,有下面几个 transfer encodings 方式:



这些传输编码方式都是什么意思呢?接下来一一讲述。

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/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

发布于: 刚刚阅读数: 2
用户头像

关注公众号:程序那些事,更多精彩等着你! 2020.06.07 加入

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧,尽在公众号:程序那些事!

评论

发布
暂无评论
网络标准之:IANA定义的传输编码_Java_程序那些事_InfoQ写作平台