UTF-7

来自GSXAB的知识库
UTF-7
术语名称 UTF-7
英语名称 UTF-7

UTF-7 是一个将 Unicode 字符集编码为 ASCII 字符流的字符编码方法。该方法已过时。 UTF 即 Unicode Transformation Format , Unicode 传输格式。但是在严格含义上, UTF 需要能够编码全部 Unicode 码位, UTF-7 的部分实现只能表示其中的 BMP ,因此不严格算是一种 UTF 。

UTF-7 编码受此在 RFC 1642 中作为实验性协议提出,并随后被 RFC 2152 标记为过时。这一编码从未被视为 Unicode 联盟的官方标准。而且目前这一编码已发现具有安全性问题,因此现今大多数软件禁止使用, HTML5 中也已禁止使用这一编码。

编码规则

在 UTF-7 中,文本中的字符被分为两类。一类包括 62 个对应数字和 ISO 基本拉丁字母的字符,以及 ' ( ) , - . / : ? 等字符,这些字符的含义不会修改,可以安全地直接使用。第二类是其他字符,需要进行转义。首先是加号 + 需要被转义为 +- ,其他字符则考虑连续的字符串,首先使用 UTF-16 编码,也就是说将 U+0000-FFFF 用双字节编码,然后 U+10000-10FFFF 被表达为一对代理对,然后将其使用不带有填充字符的 base64 编码,并使用 +- 括起来。

比如:

  • Hello, World! 编码为 Hello, World+ACE-
  • 1 + 1 = 2 编码为 1 +- 1 +AD0- 2

BOM

带有 BOM 字符的 UTF-7 总是会把 BOM 编码为 0x2B.2F.76 +/v 开头的内容,可以用于判定编码(不过 UTF-7 是单字节编码,不需要判断字节序)。


常见字符编码
早期编码 电报码、 BCD 码BCDICEBCDIC)、ASCIIISO 646
ISO 8859 ISO 8859-1 、 ISO 8859-2 、……
国标系列 IBM 代码页 936 / GB 2312微软代码页 936 / GBK微软代码页 54936 / GB 18030
Unicode / ISO 10646 UTF-7 、 UTF-8UTF-16UTF-32

参考资料

https://en.wikipedia.org/wiki/UTF-7