在 Delphi 2009 中,我们有:
RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName,TEncoding.UTF8);
RichEdit1.Lines.SaveToFile(OpenDialog2.FileName,TEncoding.Unicode);
如果我还没有,我该如何在 Delphi 2006 上执行此操作TEconding
?
有什么办法可以把那个较新的图书馆运回那里吗?或者是否有隐藏在网络中的解决方案?
在 Delphi 2009 中,我们有:
RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName,TEncoding.UTF8);
RichEdit1.Lines.SaveToFile(OpenDialog2.FileName,TEncoding.Unicode);
如果我还没有,我该如何在 Delphi 2006 上执行此操作TEconding
?
有什么办法可以把那个较新的图书馆运回那里吗?或者是否有隐藏在网络中的解决方案?
我相信这一点UTF8Encode
,UTF8Decode
甚至在 Delphi 2009 之前就已经存在。因此您可以手动解码/编码字节字符串。(我自己也做过。)
这是我的一个 Delphi 7 项目的片段:
function LoadFile(const fn: string): WideString;
var
f:TFileStream;
src:AnsiString;
wx:word;
i,j:integer;
begin
if FileExists(fn) then
begin
f:=TFileStream.Create(fn,fmOpenRead or fmShareDenyNone);
try
f.Read(wx,2);
if wx=$FEFF then
begin
//UTF16
i:=(f.Size div 2)-1;
SetLength(Result,i);
f.Read(Result[1],i*2);
//detect NULL's
for j:=1 to i do if Result[j]=#0 then Result[j]:=' ';//?
end
else
begin
i:=0;
if wx=$BBEF then f.Read(i,1);
if (wx=$BBEF) and (i=$BF) then
begin
//UTF-8
i:=f.Size-3;
SetLength(src,i);
f.Read(src[1],i);
//detect NULL's
for j:=1 to i do if src[j]=#0 then src[j]:=' ';//?
Result:=UTF8Decode(src);
end
else
begin
//assume current encoding
f.Position:=0;
i:=f.Size;
SetLength(src,i);
f.Read(src[1],i);
//detect NULL's
for j:=1 to i do if src[j]=#0 then src[j]:=' ';//?
Result:=src;
end;
end;
finally
f.Free;
end;
end
else
Result:='';
end;