首页 > 代码库 > 读写UTF-8、Unicode文件(加上了文件头,貌似挺好用)
读写UTF-8、Unicode文件(加上了文件头,貌似挺好用)
conf配置文件一些为UTF-8和Unicode格式,这样便可良好的支持多语言,从网上查阅资料后,将读写UTF-8、Unicode文件写了几个最精简的函数,更新后加了是否写文件头的功能,以适应更多需要,注意函数未加防错保护。
参数说明:f文件名、s写入或读取的文件内容、hs文件头、b是否读写文件头。
UTF-8文件写入函数
procedure SaveUTF(f:string;s:string;b:boolean=true);
var
ms:TMemoryStream;
hs:String;
begin
if s=‘‘ then exit;
ms:=TMemoryStream.Create;
if b then begin
hs:=#$EF#$BB#$BF;
ms.Write(hs[1],3);
end;
s:=AnsiToUtf8(s);
ms.Write(s[1],Length(s));
ms.Position:=0;
ms.SaveToFile(f);
ms.Free;
end;
var
ms:TMemoryStream;
hs:String;
begin
if s=‘‘ then exit;
ms:=TMemoryStream.Create;
if b then begin
hs:=#$EF#$BB#$BF;
ms.Write(hs[1],3);
end;
s:=AnsiToUtf8(s);
ms.Write(s[1],Length(s));
ms.Position:=0;
ms.SaveToFile(f);
ms.Free;
end;
UtF-8文件读取函数
function LoadUTF(f:string;b:boolean=true):string;
var
ms:TMemoryStream;
s,hs:string;
begin
Result:=‘‘;
if not FileExists(f) then exit;
ms:=TMemoryStream.Create;
ms.LoadFromFile(f);
if b then begin
SetLength(hs,3);
ms.Read(hs[1],3);
if hs<>#$EF#$BB#$BF then begin ms.Free; exit; end;
SetLength(s,ms.Size-3);
ms.Read(s[1],ms.Size-3);
end else begin
SetLength(s,ms.Size);
ms.Read(s[1],ms.Size);
end;
Result:=Utf8ToAnsi(s);
ms.Free;
end;
var
ms:TMemoryStream;
s,hs:string;
begin
Result:=‘‘;
if not FileExists(f) then exit;
ms:=TMemoryStream.Create;
ms.LoadFromFile(f);
if b then begin
SetLength(hs,3);
ms.Read(hs[1],3);
if hs<>#$EF#$BB#$BF then begin ms.Free; exit; end;
SetLength(s,ms.Size-3);
ms.Read(s[1],ms.Size-3);
end else begin
SetLength(s,ms.Size);
ms.Read(s[1],ms.Size);
end;
Result:=Utf8ToAnsi(s);
ms.Free;
end;
Unicode文件写入函数
procedure SaveUnicode(f:string;s:string;b:boolean=true);
var
ms:TMemoryStream;
hs:string;
ws:WideString;
begin
if s=‘‘ then exit;
ms:=TMemoryStream.Create;
if b then begin
hs:=#$FF#$FE;
ms.Write(hs[1],2);
end;
ws:=WideString(s);
ms.Write(ws[1],Length(ws)*2);
ms.Position:=0;
ms.SaveToFile(f);
ms.Free;
end;
var
ms:TMemoryStream;
hs:string;
ws:WideString;
begin
if s=‘‘ then exit;
ms:=TMemoryStream.Create;
if b then begin
hs:=#$FF#$FE;
ms.Write(hs[1],2);
end;
ws:=WideString(s);
ms.Write(ws[1],Length(ws)*2);
ms.Position:=0;
ms.SaveToFile(f);
ms.Free;
end;
Unicode文件读取函数
function LoadUnicode(f:string;b:boolean=true):string;
var
ms:TMemoryStream;
hs:String;
ws:WideString;
begin
Result:=‘‘;
if not FileExists(f) then exit;
ms:=TMemoryStream.Create;
ms.LoadFromFile(f);
if b then begin
SetLength(hs,2);
ms.Read(hs[1],2);
if hs<>#$FF#$FE then begin ms.Free; exit; end;
SetLength(ws,(ms.Size-2) div 2);
ms.Read(ws[1],ms.Size-2);
end else begin
SetLength(ws,ms.Size div 2);
ms.Read(ws[1],ms.Size);
end;
Result:=AnsiString(ws);
ms.Free;
end;
var
ms:TMemoryStream;
hs:String;
ws:WideString;
begin
Result:=‘‘;
if not FileExists(f) then exit;
ms:=TMemoryStream.Create;
ms.LoadFromFile(f);
if b then begin
SetLength(hs,2);
ms.Read(hs[1],2);
if hs<>#$FF#$FE then begin ms.Free; exit; end;
SetLength(ws,(ms.Size-2) div 2);
ms.Read(ws[1],ms.Size-2);
end else begin
SetLength(ws,ms.Size div 2);
ms.Read(ws[1],ms.Size);
end;
Result:=AnsiString(ws);
ms.Free;
end;
http://www.cnblogs.com/kfarvid/archive/2010/11/10/1873403.html
读写UTF-8、Unicode文件(加上了文件头,貌似挺好用)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。