procedure TForm1.Button1Click(Sender: TObject);
var
  ms: TMemoryStream;
  c: Char;
  s1: string;
begin
  ms := TMemoryStream.Create;
  ms.LoadFromFile('C:\Documents and Settings\Administrator\桌面\xx.txt'); {读入内存流}
  s1 := '';
  ms.Position := 0;                       {指针到开始}
  while ms.Position < ms.Size do          {循环读出}
  begin
    ms.Read(c,1);                         {每读出一个字节, 指针会自动移到新的位置}
    s1 := s1 + c + ' ';                   {用文本记录}
  end;
  Memo1.Lines.Text := s1;
  ms.Free;
end;为什么文本文件里面的内容是文字,显示出来却是乱码。请各位指教。谢谢了

解决方案 »

  1.   

    对双字节字符没有做处理,char只保留单字节,所以会乱码
      

  2.   

    直接 Memo1.lines.loadfromfile('C:\Documents and Settings\Administrator\桌面\xx.txt');
      

  3.   

        s1 := s1 + c + ' ';                   {用文本记录}
    改成     s1 := s1 + c ;                   {用文本记录}
      

  4.   

    按楼上的改
    对于文本文件的读取可以用textfile来操作。
      

  5.   

    还有个问题请教下,DELPHI能否读取*.lib文件的内容吗?
      

  6.   

    如果lib文件的能用记事本打开,就应该能读吧
    Procedure OpenTxt(FileName:String); 
    Var 
     F : Textfile; 
    Begin 
     AssignFile(F,FileName); {将文件名与变量 F 关联} 
     Append(F); {以编辑方式打开文件 F } 
     Writeln(F, '将您要写入的文本写入到一个 .txt 文件'); 
     Closefile(F); {关闭文件 F} 
    End; Procedure ReadTxt(FileName:String); 
    Var 
     F : Textfile; 
     str : String; 
    Begin 
     AssignFile(F, FileName); {将文件名与变量 F 关联} 
    Reset(F); {打开并读取文件 F } 
     Readln(F, str); 
     ShowMessage('文件有:' +str + '行。'); 
     Closefile(F); {关闭文件 F} 
    End; 
      

  7.   

    可以读无类型文件,LIB文件应该可以读,关键是你要知道原来是怎么存的
      

  8.   

    难道楼主只是想把文本文件显示在memo中?
    memo1.Lines.LoadFromFile ('C:\Documents and Settings\Administrator\桌面\xx.txt');
    就搞定了
      

  9.   

    编码文件的编码肯定是utf8你用的是delphi的无类型文件读写,读出来肯定是乱码,需要转换的另外*.lib肯定可以读。blockread/filestream都是无类型文件操作,不存在什么文件不可以读的情况!!!