网站地图    收藏   

主页 > 后端 > 网站安全 >

UTF-7 编码和解码规则 - Windows操作系统 - 自学php

来源:自学PHP网    时间:2015-04-17 18:33 作者: 阅读:

[导读] 作者:[肖允锋]MIME(Multipurpose Internet Mail Extensions) 中没有将 Unicode 定义为一种许可的字符集,也没有规定其如何编码。虽然已有其他的一些编码格式(如:UTF-8)应用于邮件当中,但它们...

 
 
作者:[肖允锋]

MIME(Multipurpose Internet Mail Extensions) 中没有将 Unicode 定义为一种许可的字符集,也没有规定其如何编码。虽然已有其他的一些编码格式(如:UTF-8)应用于邮件当中,但它们使用了128到255之间的数值去表示 Unicode 字符,这对于非 US-ASCII 的字符集的编解码是不利的。
因为很多邮件网关和系统无法正确地提交八位的 US-ASCII 码,这样使用扩展的 US-ASCII 的字符将出现丢失位(bit)的情况。由于 UTF-7 只使用 7 位(bit),最高位不使用,因此 UTF-7 编码能够完整的在这些系统中进行传输。
对于部分US-ASCII 字符和 US-ASCII 以外的字符,UTF-7 采用变字节顺序的方法进行解码,并使用 US-ASCII 中的保留字符作为转换字符(shift character)。以下是 UTF-7 编码和解码规则的说明。

UTF-7 将 Unicode 字符分为三种进行处理:

1. 直接进行编码的字符,即直接使用 US-ASCII 作为编码的字符。这类字符包括大小写字母、数字字符、以及下列字符。(注意不包含字符 + )
‘ ( ) , – . / : ? 。
2. 可选择的直接进行编码的字符。(注意不包含字符 和字符 ~)
! ” # $ % & * ; < = > @ [ ] ^ _ ‘ { | }
3. 除1、2两种字符以外的 Unicode字符。

UTF-7 的编码规则

1. (direct encoding) 对于第一类字符,直接使用 US-ASCII 进行编码,对于第二类字符,则可选择的使用 US-ASCII 或变字节顺序的方法进行编码。但要注意,在邮件头中,若直接对第二类字符使用 US-ASCII 进行编码,可能会出现某些网关无法正确读取的现象。
2. (Unicode shifted encoding) 除字符 “+” 和第一、二类两种字符以外字符需采用变字节顺序的方法进行解码,使用符号 “+” 控制编码过程的开始,直到遇到回车,换行字符或文末则结束,并使用 “-” 控制编码过程的结束。在 “+” 与 “-” 的编码采用修正的 Base64 编码表示。
例如: 字符串”A≠Α”(Unicode: 0041 2260 0391)的编码为:A+ImADkQ-(ASCII: 41 2B 49 6D 41 44 6B 51 2D)
3. 特殊字符 “+” 的编码为2B2D(H)。当出现着编码为2B2D(H),即”+-”的特殊情况时,直接则认定 2D(H) 无效,并予以忽略。因此2B2D(H)编码,解码得到的字符串为”+”,而不是”+-”。对于编码2B2D2D(H),解码得到的字符串才是”+-”。
4. 空格(dec 32), 跳格(dec 9), 回车(dec 13)和换行(dec 10),直接使用 US-ASCII 进行编码。

修正的 Base64 编码的计算

将字符的 Unicode big endian 编码分成两个字节看待,然后计算字符的 Base64 编码,但不使用 “=” 进行补位。

 

 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论