我在使用Memo控件的时候,发现用
Memo1.Lines.LoadFromFile(OpenDialog.FileName);
打开一些同类型的文档,有些文档可以打开,但是有些是乱码,请问是怎么回事?

解决方案 »

  1.   

    其道理就象用Windows记事本打开一些文件一样,以#13#10为换行的ASCII文本文件(常见的*.txt),可以正常显示,而不是这样的,一般会有乱码。
      

  2.   

    扩展名为.txt,不一定就是ASCII文本文件。
      

  3.   

    //楼上已经说了
    //一般通过开始几个字节判断//Unicode存、取
    procedure TForm1.Button1Click(Sender: TObject);
    var
      S: string;
      W: WideString;
    begin
      if Memo1.Text = '' then Exit;
      //存
      with TMemoryStream.Create do try
        S := #$FF#$FE;
        Write(S[1], Length(S));
        W := Memo1.Text;
        Write(W[1], Length(W) * SizeOf(WideChar));
        Position := 0;
        SaveToFile('c:\temp\temp.txt');
      finally
        Free;
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      S: string;
      W: WideString;
    begin
      //取
      if not FileExists('c:\temp\temp.txt') then Exit;
      with TMemoryStream.Create do try
        LoadFromFile('c:\temp\temp.txt');
        if Size < 4 then Exit;
        SetLength(S, 2);
        Read(S[1], Length(S));
        if Copy(S, 1, 2) <> #$FF#$FE then Exit;
        SetLength(W, (Size - 2) div SizeOf(WideChar));
        Read(W[1], Length(W) * SizeOf(WideChar));
        Memo2.Text := W;
      finally
        Free;
      end;
    end;//Utf8存、取
    procedure TForm1.Button1Click(Sender: TObject);
    var
      S: string;
    begin
      //存
      with TMemoryStream.Create do try
        S := #$EF#$BB#$BF;
        Write(S[1], Length(S));
        S := AnsiToUtf8(Memo1.Text);
        Write(S[1], Length(S));
        Position := 0;
        SaveToFile('c:\temp\temp.txt');
      finally
        Free;
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      S: string;
    begin
      //取
      if not FileExists('c:\temp\temp.txt') then Exit;
      with TMemoryStream.Create do try
        LoadFromFile('c:\temp\temp.txt');
        SetLength(S, Size);
        Read(S[1], Length(S));
        if Copy(S, 1, 3) <> #$EF#$BB#$BF then Exit;
        Memo2.Text := Utf8ToAnsi(Copy(S, 4, MaxInt));
      finally
        Free;
      end;
    end;