一般大多数包含"="的不是"Base64"编码格式,只有"quoted-printable"编码格式才会经 常出现"="虽然都是MIME编码,但是算法不一样 ,"quoted-printable"的我不太清楚.讲一下Base64的吧. 
Base64算法是把3个8位字符(24)转换成4个6位字符(32),因此编码后的长度会扩大1/3, 进行编码转换时需要用到一张Base64的编码表:                             Table 1: The Base64 Alphabet 
      Value Encoding  Value Encoding  Value Encoding  Value Encoding            0 A            17 R            34 i            51 z            1 B            18 S            35 j            52 0            2 C            19 T            36 k            53 1            3 D            20 U            37 l            54 2            4 E            21 V            38 m            55 3            5 F            22 W            39 n            56 4            6 G            23 X            40 o            57 5            7 H            24 Y            41 p            58 6            8 I            25 Z            42 q            59 7            9 J            26 a            43 r            60 8           10 K            27 b            44 s            61 9           11 L            28 c            45 t            62 +           12 M            29 d            46 u            63 /           13 N            30 e            47 v           14 O            31 f            48 w         (pad) =           15 P            32 g            49 x           16 Q            33 h            50 y 在VB中可以简单的将其保存为一个常量: Private Const Base64Table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" 
编码过程是这样的,第一个字符通过右移2位获得第一个目标字符的Base64表位置,根据 这个数值取到表上相应的字符,就是第一个目标字符 ,然后将第一个字符左移6位加上第二个字符右移4位,即获得第二个目标字符,再将第二 个字符左移4位加上第三个字符右移6位,获得第三个 目标字符,最后取第三个字符的右6位即获得第四个目标字符. 
例如我们取一个简单的字符串"TEST..." 将其用SourceByte = StrConv(SourceText, vbFromUnicode)转换后获得二进制数组: T         E         S         T            ... 84        69        83        84           ... 01010100  01000101  01010011  01010100     ... 01010100/01000101/01010011/01010100 01010100010001010101001101010100 转换后: 01010100010001010101001101010100 010101/000100/010101/010011/010101/00 010101    000100    010101    010011    010101    00.... 21        4         21        19        21        ... V         E         V         T         V         ... 最后得到的就是"VEVTV..." 
对于第一个目标字符我们可以这样做: (SourceByte(1) and 252)/4 第二个: (SourceByte(1) and 3)*64 + (SourceByte(2) and 240)/16 第三个: (SourceByte(2) and 15)*16 + (SourceByte(3) and 48)/64 第四个: (SourceByte(3) and 63) 
Base64解码过程正好相反,我就不多说了,另外有关MIME的RFC还是有很多的,如果需要详 细情况请自己查找,我上面那张表就摘自 <RFC1521# MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies>
   
 
  |