怎么把 ?gbk?B?xPq6ww==?= 转化成中文

runsoft 2008-02-28 12:26:03
怎么把 ?gbk?B?xPq6ww==?= 转化成中文
谢谢!
...全文
536 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
编码,“中国”-->"=?gbk?b?......?="
javax.mail.internet.MimeUtility.encodeText(str);


解码,"=?gbk?b?......?=" --> “中国”
javax.mail.internet.MimeUtility.decodeText(str);

需要使用javamail.jar包
zhoujianhei 2008-02-28
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20020828/12/976702.html

http://topic.csdn.net/t/20021210/09/1246091.html
runsoft 2008-02-28
  • 打赏
  • 举报
回复
上面是GB2312码
runsoft 2008-02-28
  • 打赏
  • 举报
回复
可以了,确实正如 arkirya 所说,非常感谢各位兄弟
dong127 2008-02-28
  • 打赏
  • 举报
回复
英文和数字其本身就是base64编码的组成部分...
  • 打赏
  • 举报
回复
应该是QP(Quote-Printable)
具体你可以参考这里
http://www.ucnu.cn/software/p506/A50662209.shtml
  • 打赏
  • 举报
回复
Q表示是另外一种编码,quo什么的(不记得名字了),是outlook采用的编码
runsoft 2008-02-28
  • 打赏
  • 举报
回复
?gbk?Q?=B2=E2=CA=D4english?= 这个中文+英文 是 测试english = ?gbk?Q?=B2=E2=CA=D4english?=

为什么不是 ?gbk?B? 而是?gbk?Q?
  • 打赏
  • 举报
回复
如果是英文则不需要编码
因为某些路由 只支持7位传输,也就是汉字的最高位丢弃了,base64就是解决这个问题的。
所以汉字需要Base64编码,而英文不需要。
?gbk?B?这一些就是编码约定,看到这个东西对方就知道如何解码了。
章月庭 2008-02-28
  • 打赏
  • 举报
回复
你可以先下载一个StrParser软件,看看是什么编码。再去到ATL库中找到相应的代码。
#include <atlenc.h>
就可以了
cnzdgs 2008-02-28
  • 打赏
  • 举报
回复
那就说明英文和数字没有经过base64编码。
runsoft 2008-02-28
  • 打赏
  • 举报
回复
我有点迷糊的是,既然经过base64编码, 为什么字母和数字 输入到主题上去,可以直接获取到 ,而中文却不可以,出来的是上面的 ?gbk?B?xPq6ww==?=
runsoft 2008-02-28
  • 打赏
  • 举报
回复
还有一个问题,我在主题中输入中文 : 测试 则显示出 ?gbk?B?xPq6ww==?=, 如故输入 英文比如 hello.获取ip包的数据包时候,直接可以显示出hello.

我有点迷糊的是,既然经过base64编码, 为什么 字母和数字,确可以 直接提取数据包 的到呢(我用winpcap获取的ip包)
runsoft 2008-02-28
  • 打赏
  • 举报
回复
下了一个代码,把上面的翻译出来了.感谢各位.
cnzdgs 2008-02-28
  • 打赏
  • 举报
回复
你的代码中unsigned char* pDst; 未分配内存。
runsoft 2008-02-28
  • 打赏
  • 举报
回复
cnzdgs 能不能贴代码出来,谢谢.
cnzdgs 2008-02-28
  • 打赏
  • 举报
回复
base64编码是用4个字符表示24位数据,每个字符表示6位。其中A~Z表示0~25,a~z表示26~51,0~9表示52~61,+表示62,/表示63,=表示占位。
runsoft 2008-02-28
  • 打赏
  • 举报
回复
我找到一个函数
int DecodeBase64(const char* pSrc, unsigned char* pDst, int nSrcLen)
{
int nDstLen; // 输出的字符计数
int nValue; // 解码用到的长整数
int i; i = 0; nDstLen = 0; // 取4个字符,解码到一个长整数,再经过移位得到3个字节
while (i < nSrcLen)
{
if (*pSrc != '\r' && *pSrc!='\n')
{ nValue = DeBase64Tab[*pSrc++] << 18;
nValue += DeBase64Tab[*pSrc++] << 12;
*pDst++ = (nValue & 0x00ff0000) >> 16;
nDstLen++;
if (*pSrc != '=')
{
nValue += DeBase64Tab[*pSrc++] << 6;
*pDst++ = (nValue & 0x0000ff00) >> 8;
nDstLen++;
if (*pSrc != '=')
{
nValue += DeBase64Tab[*pSrc++];
*pDst++ =nValue & 0x000000ff;
nDstLen++;
}
}
i += 4;
}
else // 回车换行,跳过
{
pSrc++;
i++;
} } // 输出加个结束符
*pDst = '\0';
return nDstLen;
}

//调用
char *pSrc = "xPq6ww";

unsigned char* pDst;

int nSrcLen;

nSrcLen = sizeof(pSrc);

DecodeBase64(pSrc, pDst, nSrcLen);

为什么出错呢
runsoft 2008-02-28
  • 打赏
  • 举报
回复
是不是?gbk?B?xPq6ww==?= 中只要 解码xPq6ww==
  • 打赏
  • 举报
回复
?gbk?B?xPq6ww==?=
?gbk表示后边的内容是gbk编码的内容
?B表示数据经过了base64编码
这是email 的主题 常用的 东西

至于base64解码你baidu或者google 肯定能找到解码的代码。
加载更多回复(7)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧