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; i<pszLen; i++)
{
if (a[i] == 0x0D || a[i] == 0x0A)
{
for (int j = i; j<pszLen; j++)
{
if (j + 1 < pszLen)
a[j] = a[j + 1];
}
pszLen = pszLen - 1;
if (i>1)
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
网友评论