|

楼主 |
发表于 2015-9-10 14:57:54
|
显示全部楼层
//利用以上 IsUtf8Encoded(), 讓 TMemo 可以自動判斷是 Ansi Text 還是 Utf8 Text, 而能正確讀入
procedure TForm1.SpeedButton1Click(Sender: TObject);
var TmpList: TStringList;
IsUtf8Text: boolean;
begin
TmpList := TStringList.Create;
if (OpenDialog1.Execute) then
begin
//因為lazarus都是UTF-8編碼,如果直接用Memo1.LoadFromFile()
//在系統會無法開啟Ansi編碼的文字檔, 但是可以透過TStringList來讀入之後,
//判斷文字內容若是Ansi編碼,就利用AnsiToUtf8()把Ansi編碼轉為UTF-8編碼的文字,
//就可以放入Memo1.Text來顯示文字檔的內容,也就是TMemo只能顯示UTF-8編碼的文字.
//儲存檔案時,若原檔案是Ansi編碼,就要先利用UTF8ToAnsi()
//把Memo1.Text由UTF-8編碼轉為Ansi編碼才儲存,
TmpList.LoadFromFile(Utf8ToAnsi(OpenDialog1.FileName)); //路徑要用 ansi string ;
//判斷是否開啟 UTF8 文件
IsUtf8Text:=IsUtf8Encoded(TmpList.Text);
if (IsUtf8Text) then
begin
//開啟 UTF8 文件-----------
Memo1.Lines.Text:=TmpList.Text;
end else begin
//開啟 ANSI 文件-----------
Memo1.Lines.Text:=AnsiToUtf8(TmpList.Text);
end;
end;
TmpList.Free;
end; |
|