如下
1
=?gbk?B?1965pMT6usOjobnY09q+2bDsIKGwxvPStdDFz6K53A==?= =?gbk?B?wO3KpqGxILn6vNLWsNK118q48cXg0bWw4LXEzajWqg==?=
解码后得到:
2
=?GB18030?B?1Pi659TGLMvEtKjA7bmk0afUui3Cw9POudw=?= =?GB18030?B?
解码后得到:3
=?GB2312?B?W0JVTEtdIA==?= =?GB2312?B?bWlzILfnyfrLrsbw?=
解码后得到:
[BULK]  风生水起我想知道上面的解码的函数,不要说用base64解码或者直接在网上找个GetTitle就可以了 解出来都有问题,所以特别发帖问
还有能提供邮件的编码和解码方式都可以给分,分不够就说了。

解决方案 »

  1.   

    请参考
    http://topic.csdn.net/u/20090204/17/138f7429-0dd3-4a66-be53-e01a28d56a25.html
      

  2.   

    IdCoderHeader.pas当中有一个DecodeHeader函数可以帮你解出来。
      

  3.   

    需要注意的是,Indy默认包含GB2312,但是并没有包含GBK和GB18030,这个需要调用IdHeaderCoderBase.pas当中RegisterHeaderCoder进行注册。
      

  4.   

    DecodeHeader函数 这个解不出来的啊?
    僵哥你试过的没有啊
      

  5.   

    在3楼我不是有回复过了么?具体的实现可以参考IdHeaderCoderBig5.pas
      

  6.   

    举个例子,把下面这个单元添加到你的程序当中就可以解出GB18030
    unit Unit7;interface//{$i IdCompilerDefines.inc}uses
      IdGlobal, IdHeaderCoderBase;type
      TIdHeaderCoderGB18030 = class(TIdHeaderCoder)
      public
        class function Decode(const ACharSet, AData: String): String; override;
        class function Encode(const ACharSet, AData: String): String; override;
        class function CanHandle(const ACharSet: String): Boolean; override;
      end;
    implementationclass function TIdHeaderCoderGB18030.Decode(const ACharSet, AData: String): String;
    begin
      Result := AData;end;class function TIdHeaderCoderGB18030.Encode(const ACharSet, AData: String): String;
    begin
      Result := AData;
      
    end;class function TIdHeaderCoderGB18030.CanHandle(const ACharSet: String): Boolean;
    begin
      Result := TextIsSame(ACharSet, 'GB18030');
    end;initialization
      RegisterHeaderCoder(TIdHeaderCoderGB18030);
    finalization
      UnregisterHeaderCoder(TIdHeaderCoderGB18030);
    end.
      

  7.   

    也可以这样子写,那么GBK和GB18030就都可以解出来了。
    unit Unit7;interface//{$i IdCompilerDefines.inc}uses
      IdGlobal, IdHeaderCoderBase;type
      TIdHeaderCoderGB18030 = class(TIdHeaderCoder)
      public
        class function Decode(const ACharSet, AData: String): String; override;
        class function Encode(const ACharSet, AData: String): String; override;
        class function CanHandle(const ACharSet: String): Boolean; override;
      end;  TIdHeaderCoderGBK = class(TIdHeaderCoder)
      public
        class function Decode(const ACharSet, AData: String): String; override;
        class function Encode(const ACharSet, AData: String): String; override;
        class function CanHandle(const ACharSet: String): Boolean; override;
      end;
    implementationclass function TIdHeaderCoderGB18030.Decode(const ACharSet, AData: String): String;
    begin
      Result := AData;end;class function TIdHeaderCoderGB18030.Encode(const ACharSet, AData: String): String;
    begin
      Result := AData;
      
    end;class function TIdHeaderCoderGB18030.CanHandle(const ACharSet: String): Boolean;
    begin
      Result := TextIsSame(ACharSet, 'GB18030');
    end;class function TIdHeaderCoderGBK.Decode(const ACharSet, AData: String): String;
    begin
      Result := AData;end;class function TIdHeaderCoderGBK.Encode(const ACharSet, AData: String): String;
    begin
      Result := AData;
      
    end;class function TIdHeaderCoderGBK.CanHandle(const ACharSet: String): Boolean;
    begin
      Result := TextIsSame(ACharSet, 'GBK');
    end;initialization
      RegisterHeaderCoder(TIdHeaderCoderGB18030);
      RegisterHeaderCoder(TIdHeaderCoderGBK);
    finalization
      UnregisterHeaderCoder(TIdHeaderCoderGB18030);
      UnregisterHeaderCoder(TIdHeaderCoderGBK);  
    end.
      

  8.   

    我的电脑找遍了都找不到你说的这个IdCoderHeader.pas
      

  9.   

    Delphi的什么版本?或者说是Indy的什么版本?
      

  10.   

    刚看了一下Delphi6都有IdHeaderCoder,所以你的机器肯定会有。比如Source\Indy目录。如果没有的话可以下载一份Indy9的代码做参考。
      

  11.   

    都说整个硬盘都没有,不骗你啊,我的控件换了indy9  IdHeaderCoder这个也没有啊,我不想换控件啊,老大
      

  12.   

    Indy9的实现有点弱,建议更新到Indy10.2.3
      

  13.   

    IdCoderHeader.pas
    IdHeaderCoderBig5.pas能不能把这两个文件或其它有用的文件发给我啊
    [email protected]
      

  14.   

    控件可以不换,比如从Indy10当中抽离出解码部分。
      

  15.   

    Indy10是一个exe文件,要安装的,安装我原来得控件indy9的就不见了
      

  16.   

    http://indy.fulgan.com/ZIP/indy10.zip或者
    http://download.csdn.net/source/583914
      

  17.   

     Result := TextIsSame(ACharSet, 'GB18030');
    TextIsSame这个是什么函数来的,说找不到
      

  18.   

    忽略大小写的一个字符串比较,相等返回true,否则返回false.
      

  19.   

    老大别玩我了,你贴出来吧
    TextIsSame这个在那里找的
    ToDo;这个又什么意思啊?
      

  20.   

    TextIsSame,如果我没有记错的话在StrUtils单元当中就有一个SameText.具体的代码,我上面都已经贴出来了,为什么还要去看那个BIG5的实现框架?
      

  21.   

    别那么凶啊?大侠
    是我错了,不好意思unit Unit7;interface//{$i IdCompilerDefines.inc}uses
      IdGlobal, IdHeaderCoderBase;type
      TIdHeaderCoderGB18030 = class(TIdHeaderCoder)
      public
        class function Decode(const ACharSet, AData: String): String; override;
        class function Encode(const ACharSet, AData: String): String; override;
        class function CanHandle(const ACharSet: String): Boolean; override;
      end;  TIdHeaderCoderGBK = class(TIdHeaderCoder)
      public
        class function Decode(const ACharSet, AData: String): String; override;
        class function Encode(const ACharSet, AData: String): String; override;
        class function CanHandle(const ACharSet: String): Boolean; override;
      end;
    implementationclass function TIdHeaderCoderGB18030.Decode(const ACharSet, AData: String): String;
    begin
      Result := AData;end;class function TIdHeaderCoderGB18030.Encode(const ACharSet, AData: String): String;
    begin
      Result := AData;
      
    end;class function TIdHeaderCoderGB18030.CanHandle(const ACharSet: String): Boolean;
    begin
      Result := TextIsSame(ACharSet, 'GB18030');
    end;class function TIdHeaderCoderGBK.Decode(const ACharSet, AData: String): String;
    begin
      Result := AData;end;class function TIdHeaderCoderGBK.Encode(const ACharSet, AData: String): String;
    begin
      Result := AData;
      
    end;class function TIdHeaderCoderGBK.CanHandle(const ACharSet: String): Boolean;
    begin
      Result := TextIsSame(ACharSet, 'GBK');
    end;initialization
      RegisterHeaderCoder(TIdHeaderCoderGB18030);
      RegisterHeaderCoder(TIdHeaderCoderGBK);
    finalization
      UnregisterHeaderCoder(TIdHeaderCoderGB18030);
      UnregisterHeaderCoder(TIdHeaderCoderGBK);  
    end.
    这个加进去也是一样的,
    调用那个IdCoderHeader.DecodeHeader还是解码不了的
    应该怎么做啊?
      

  22.   

    用Indy10里面的IdCoderHeader,最好是直接添加到工程当中,或者重命名。
      

  23.   

    先要说清楚你的使用环境,比如是要让现有的控件支持相应的功能还是说只要实现这个功能就可以。如果是只需要实现这个功能,那么就只需要引入Indy10的相关单元(为防止冲突,可以改一下单元的名称),如果是要在现有的控件上实现那么就相对麻烦一点,比如由现有的控件上面继承下来,然后覆盖相应的实现等。