UTF-7
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 码 (BCDIC、EBCDIC)、ASCII (ISO 646) |
ISO 8859 | ISO 8859-1 、 ISO 8859-2 、…… |
国标系列 | IBM 代码页 936 / GB 2312 、 微软代码页 936 / GBK 、 微软代码页 54936 / GB 18030 |
Unicode / ISO 10646 | UTF-7 、 UTF-8、 UTF-16 、 UTF-32 |