关于邮件主题编码,急求教 Outlook Express发动送的邮件主题如下: =?gb2312?B?yc+087rzt72+rbn9t6g=?=请指教编码/解码算法另请问,邮件主题还有什么样的编码方式? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有三中,B(Base64),Q(Quoted-Printable),U(UUEncode)上面是Base64编码,=?gb2312?B?yc+087rzt72+rbn9t6g=?=内容是yc+087rzt72+rbn9t6g=,只要使用base64解码就可以了. =?gb2312?B?yc+087rzt72+rbn9t6g=?=其中B为编码类型指示,是吗?还有,如果要提供国际语言支持,可能有很多语言编码,该怎么办? to BCB_FANS(四大名捕之追杀令):那=gb2312忽略就可以了吗?有没有相关的RFC可以参考? 可以,我程序就不考虑那些东西.具体参考RFC1522.txt 可以,我程序就不考虑那些东西.具体参考RFC1522.txt 内容之外的那些部分都可忽略:下面是我的BCB代码,不过你应该看得懂.//DecodeISO8859,用来解码Subject及Attachment FilenameAnsiString __fastcall TMailHeader::DecodeISO8859(AnsiString TextTo){ // Example: // =?ISO-8859-1?Q?=D6=D8=B4=F3=B9=B1=CF=D7 ddddddd ddddddd?= // =?gb2312?B?1tC/xtS6IGtmZHNmZHNmIGZkc2Zsa3Nm?= int Pos1,Pos2,Pos3,Pos4; int StrLen; StrLen=TextTo.Length(); Pos1=TextTo.Pos("=?"); if(Pos1 == 0) return TextTo; Pos2=TextTo.SubString(Pos1+2,StrLen).Pos("?") +Pos1+1; Pos3=TextTo.SubString(Pos2+1,StrLen).Pos("?") +Pos2; Pos4=TextTo.SubString(Pos3+1,StrLen).Pos("?=")+Pos3; if(Pos2 > Pos1 && Pos3 > Pos2 && Pos4 > Pos3) { char EncodingChar=TextTo[Pos2+1]; AnsiString BackupTextTo=TextTo; TextTo=TextTo.SubString(1,Pos4 -1);//去掉"?=" TextTo=TextTo.SubString(Pos3+1,StrLen); if(EncodingChar=='Q' || EncodingChar=='q') // Quoted-Printable Encode { int SpaceIndex; while((SpaceIndex=TextTo.Pos("_"))>0)//替换空格 TextTo[SpaceIndex]=char(0x20); TextTo=Mime::DecodeQP(TextTo); } else if(EncodingChar=='B' || EncodingChar=='b')// Base64 Encode { TextTo=AnsiString((char*)Mime::DecodeBase64(TextTo)); } //else if(EncodingChar=='U' || EncodingChar=='u')// UUEncode Encode,Unsupport at current version //{ TextTo=UUDecode(TextTo); } else { TextTo=BackupTextTo; } } return TextTo;}//--------------------------------------------------------------------------- to:BCB_FANS(四大名捕之追杀令)呵呵,内容之外的东西都忽略忽略其他的东西就是内容是不是啊?你不觉得简直就是等于没说吗不过很感谢你的代码虽然我自己已经写了。不过我考虑的可能不够完善暂时不管了呵呵 安装2008补丁 求解 请问怎么使用这个ActiveX控件? OCX控件删除后重新生成失败,求教 com自动化用处 关于InstallShield制作安装的问题 怎样 “连续地自动地” 读取某一指定路径下的所有文件 |不好意思,暂时没有分了,先欠着大家的人情了 高分求教! 怎样实现用vc编程查找ORACLE中的表 关于 CFileException 请问高手,对于没有太多计算机知识的人来说,如果想学习编程,应该怎样学习? 请问哪位高手用过SQLConfigDataSource这个API函数?
上面是Base64编码,=?gb2312?B?yc+087rzt72+rbn9t6g=?=
内容是yc+087rzt72+rbn9t6g=,只要使用base64解码就可以了.
其中B为编码类型指示,是吗?
还有,如果要提供国际语言支持,可能有很多语言编码,该怎么办?
那=gb2312忽略就可以了吗?有没有相关的RFC可以参考?
AnsiString __fastcall TMailHeader::DecodeISO8859(AnsiString TextTo)
{
// Example: // =?ISO-8859-1?Q?=D6=D8=B4=F3=B9=B1=CF=D7 ddddddd ddddddd?=
// =?gb2312?B?1tC/xtS6IGtmZHNmZHNmIGZkc2Zsa3Nm?= int Pos1,Pos2,Pos3,Pos4;
int StrLen; StrLen=TextTo.Length(); Pos1=TextTo.Pos("=?"); if(Pos1 == 0) return TextTo; Pos2=TextTo.SubString(Pos1+2,StrLen).Pos("?") +Pos1+1;
Pos3=TextTo.SubString(Pos2+1,StrLen).Pos("?") +Pos2;
Pos4=TextTo.SubString(Pos3+1,StrLen).Pos("?=")+Pos3; if(Pos2 > Pos1 && Pos3 > Pos2 && Pos4 > Pos3)
{
char EncodingChar=TextTo[Pos2+1]; AnsiString BackupTextTo=TextTo; TextTo=TextTo.SubString(1,Pos4 -1);//去掉"?="
TextTo=TextTo.SubString(Pos3+1,StrLen); if(EncodingChar=='Q' || EncodingChar=='q') // Quoted-Printable Encode
{
int SpaceIndex; while((SpaceIndex=TextTo.Pos("_"))>0)//替换空格
TextTo[SpaceIndex]=char(0x20); TextTo=Mime::DecodeQP(TextTo);
}
else if(EncodingChar=='B' || EncodingChar=='b')// Base64 Encode
{
TextTo=AnsiString((char*)Mime::DecodeBase64(TextTo));
}
//else if(EncodingChar=='U' || EncodingChar=='u')// UUEncode Encode,Unsupport at current version
//{ TextTo=UUDecode(TextTo); }
else
{
TextTo=BackupTextTo;
}
} return TextTo;
}
//---------------------------------------------------------------------------
呵呵,内容之外的东西都忽略
忽略其他的东西就是内容
是不是啊?
你不觉得简直就是等于没说吗
不过很感谢你的代码
虽然我自己已经写了。
不过我考虑的可能不够完善
暂时不管了
呵呵