分享

Delphi中UTF8文本的存取

 aaie_ 2012-06-28

var
S:UTF8String;
F:TextFile;
begin
S:=UTF8Encode(Memo1.Text);
AssignFile(F, 'C:\test.txt');
Rewrite(F);
Write(F,#$EF+#$BB+#$BF); //UTF8标记
Write(F,S);
CloseFile(F);
end;
 

//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;

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多