升级一个已有的类似qq的东西。
原程序在发送信息前,对输入框的发送内容进行加密和压缩。在显示框里将信息再解密和解压缩后显示出来。
对于给一个字符串s,经过它的加密,解密处理后,s仍是个乱码,类似于这种信息:
{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset134 \'cb\'ce\'cc\'e5;}}
\viewkind4\uc1\pard\lang2052\f0\fs20\'b4\'f3\'b7\'a2\'c9\'fa\'b5\'c4
\par }
后面附有它的压缩和解压缩过程。
我的问题是不改它的压缩过程,怎么改下解压缩和解密的过程,使得字符串能被正确的解出来呢??
我曾把它的压缩过程改了一下,能正常解压缩字符串了,但是带来了很多其它的难处理的问题。它的压缩过程是  destStream := TStringStream.Create('');
  try
    cStream := TZCompressionStream.Create(destStream);
    try    
        redtInput.Lines.SaveToStream(cStream)//redtInput.Lines是TStrings,就是输入的内容。
    finally
      cStream.Free;
    end;
   Result := sCmd + #13#10 + EncodeString(destStream.DataString);它的解压缩过程是:function DecodeAndUnCompress(const AString: string): string;
const
  CReadLen = 1024;
var
  srcStream: TStringStream;
  dcStream: TZDecompressionStream;
  iCount: Integer;
begin
  //解码
  Result := DecodeString(AString);
  //解压缩
  srcStream := TStringStream.Create(Result);
  try
    dcStream := TZDecompressionStream.Create(srcStream);
    try
      Result := '';
      repeat
        SetLength(Result, length(Result) + CReadLen);
        iCount := dcStream.Read(Result[length(Result) - CReadLen + 1], CReadLen);
      until (iCount <> CReadLen);
    finally
      dcStream.Free;
    end;
  finally
    srcStream.Free;
  end;
end;

解决方案 »

  1.   

    这个应该是rtf格式字符串吧,在richiedit里显示看行不?
      

  2.   

    是一个rtf的字符串。
    不用richedit的话,怎么能将这个rtf存到文件中,打开文件就能看到正常的信息?
      

  3.   

    以前我也像你怎么试过没有成功,后来放弃。不能不用一个简单的方法:
    引用单元 EncdDecd, function  EncodeString(const Input: string): string;
    function  DecodeString(const Input: string): string;加密 解密 直接使用;
    或者用ord('')把字符串的每个字符,转换成十进制,对于数字你可以随便操作 加减乘除。然后用chr(000) 把十进制数 转换成字符,你客户看见一长串数字,肯定眼花缭乱!
      

  4.   

    这个问题后来我采用了,直接将rtf存到一个*.rtf文件中,然后用word就可以查看了。
    感谢以上各位。