BASE64解码之中文乱码问题

RFC2045中有规定:
The encoded output stream must be represented in lines of no more than 76 characters each.
Base64一行不能超过76字符,超过则添加回车换行符。

经过base64编码后的数据,每隔76个字符,有回车换行符“\r\n”,'\r'和‘\n’各占一个字节。所以在解码数据之前,先删除数据中的回车换行符,即可解决因回车换行符而导致的乱码问题。

回车换行符因素导致乱码的确定:

可以将拿到的数据转成16进制打印出来,查看是否存在回车换行符'\r' '\n'在ASCII码表中所对应的16进制数 0x0D 0x0A.

以下为删除回车换行符 C++ 代码:
 string s = "yangdiao\r\nyangdiaoyangdiao";
 int pszLen = s.length();
 
 char *a = new char[pszLen+1];
 memcpy(a, s.c_str(), pszLen);

 for (int i = 0; i1)
              i = i - 1;
      }
 }

 char *b = new char[pszLen+1];
 memcpy(b, a, pszLen);
 b[pszLen] = 0x00;
 printf("删除回车换行符后的数据: %s\n",b);

 delete a;
 delete b;

参考:

http://blog.csdn.net/jifengwan/article/details/45460695
http://www.cnblogs.com/lijiale/p/5434050.html
http://blog.sina.com.cn/s/blog_4eb5ae750101cq16.html

你可能感兴趣的:(BASE64解码之中文乱码问题)