读书人

delphi7 压缩excel出现乱码解决办法

发布时间: 2012-02-14 19:19:19 作者: rapoo

delphi7 压缩excel出现乱码

Delphi(Pascal) code
library ConvertFormat;uses  SysUtils,  Classes,  ZLib;  {$R *.res}//压缩function CompressFile(const DestFile,SrcFile:pchar):Boolean; stdcall;var  des:TMemoryStream;  sou:TMemoryStream;  cs: TCompressionStream;  Count: Integer;  ret:boolean;  level: TCompressionLevel;begin  ret:=false;  level:= clFastest;  des:=TMemoryStream.Create;  sou:= TMemoryStream.Create;  cs:=TCompressionStream.Create(level,des);  try    sou.LoadFromFile(SrcFile);    Count:=sou.Size;    sou.SaveToStream(cs);    cs.Free;    sou.Clear;    sou.WriteBuffer(Count, SizeOf(Count));    sou.CopyFrom(des,0);    des.Clear;    des.Seek(0,soFromBeginning);    des.CopyFrom(sou,0);    des.SaveToFile(DestFile);    ret:=true;  finally    des.Free;    sou.Free;    result:=ret;  end;end;//解压缩function DeCompressFile(const DestFile,SrcFile:pchar):boolean;stdcall;var  des:TFileStream;  sou:TMemoryStream;  decs: TDeCompressionStream;  Buffer: PChar;  Count: integer;  ret:boolean;begin  Buffer:=nil;  ret:=false;  des:=TFileStream.Create(DestFile,fmCreate);  sou:= TMemoryStream.Create;  decs:=nil;  try    sou.LoadFromFile(SrcFile);    sou.Seek(0,soFromBeginning);    sou.ReadBuffer(count,sizeof(count));    GetMem(Buffer, Count);    decs:=TDeCompressionStream.Create(sou);    decs.ReadBuffer(Buffer^, Count);    Des.WriteBuffer(Buffer^, Count);    Des.Position := 0;//复位流指针    ret:=true;  finally    FreeMem(Buffer);    decs.Free;    des.Free;    sou.Free;    result:=ret;  end;end;exportsCompressFile, DeCompressFile;beginend.


调用 CompressFile 压缩然后调用 DeCompressFile 解压后出现乱字符

出现乱码的字符为 “×”(乘号),显示为?

在excel单元格中,如果乘号前面有汉字,则不会出现乱字符

如果乘号前面没有汉字,则乘号会和后面的一个字符结合,显示为一个问号

求解答

[解决办法]
D7经测试,没发现有乱码

读书人网 >.NET

热点推荐