一个简单问题
我在使用Memo控件的时候,发现用
Memo1.Lines.LoadFromFile(OpenDialog.FileName);
打开一些同类型的文档,有些文档可以打开,但是有些是乱码,请问是怎么回事?
[解决办法]
其道理就象用Windows记事本打开一些文件一样,以#13#10为换行的ASCII文本文件(常见的*.txt),可以正常显示,而不是这样的,一般会有乱码。
[解决办法]
//楼上已经说了
//一般通过开始几个字节判断
//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;