如何读取这个文件内的文本?该文件1048591.vmg是若基亚手机的短信文件,因为想把短信存到Access里,所以要读取文件内容。这个文件里的文本有点怪,用Windows的记事本打开是[文件.rar]未命名2.jpg的样子,短信里的中文信息打开全是乱码,我在IDE里跟踪发现短信里的英文信息在每个字符中间有个#0,而那段中文信息则是一段乱码(中间也有#0);但如果用[文件.rar]notepad.exe打开这个文件就一切正常,打开后没有乱码的情况,也就排除了信息加密的情况。问题的关键就是解决乱码问题,还请各位高手帮帮忙……([文件.rar]中有1048591.vmg短信文件)附件发到(盒子)里了http://bbs.2ccc.com/topic.asp?topicid=230648

解决方案 »

  1.   

    仔细看了你的文件,发现如果是英文,则按照Ansi编码,并且后面跟#$20(空格)区分,如果是中文,这是unicode编码。这段程序可以解你的文字。const
      FileName='......\1048591.vmg';
    var
      Stm:TFileStream;
      Buf:PChar;
      Ch1,Ch2:Char;
      WC:WideChar;
      P:PChar;
      i:Integer;
      ws:WideString;
      Len:integer;
    begin
      stm:=TFileStream.Create(FileName,fmOpenRead);
      try
        Len:=Stm.Size;
        GetMem(Buf,Len);
        try
        Stm.Read(Buf^,Len);    ws:='';
        i:=0;
        P:=Pointer(@WC);
        while i<Len do
        begin
          Ch1:=Buf[i];
          Ch2:=Buf[i+1];
    //如果是英文,后面跟空格
          if Ch2=#$20 then
          begin
            P[0]:=Ch1;
            P[1]:=#0;
          end
          else
          begin
            P[0]:=Ch1;
            P[1]:=Ch2;
          end;      ws:=ws+WC;
          Inc(i,2);
        end;
      finally
        FreeMem(Buf);
      end;
        finally
        Stm.Free;
      end;
      ShowMessage(ws);
    end;