读写Unicode和UTF8格式文件

本文提供了一组用于读取和写入UTF8及UNICODE格式文件的函数,包括ReadUtf8File、WriteUtf8File、ReadUnicodeFile和WriteUnicodeFile。这些函数能够帮助开发者正确地处理不同编码格式的文本文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

//---------------------------------------------- // Unit Name: FileExt.pas // Comment: 读写UTF8和UNICODE格式文件的一组函数 // Author: xieyunc 改自网络 // Date : 2007-11-23 10:47:59 //---------------------------------------------- unit FileExt; interface   uses SysUtils,Windows,Types,Classes; const   utf8Head:  Array[0..2] of Char = (#239,#$bb,#$bf);   unicodeHead: Array[0..1] of Char = (#255,#$fe);   function ReadUtf8File(const filename:string):UTF8String;   procedure WriteUtf8File(const filename:string;mem:Utf8String);   function ReadUnicodeFile(const filename:string):WideString;   procedure WriteUnicodeFile(const filename:string;mem:Widestring); implementation // read utf8 file function ReadUtf8File(const filename:string):Utf8String; var   memoStream:TFileStream;   buf:array of Char; begin   memoStream:=TFileStream.Create(filename, fmOpenRead);   try     setlength(buf,memoStream.size);     memoStream.ReadBuffer(buf[0], memoStream.size);     //utf-8 file     if (buf[0]=Utf8Head[0]) and (buf[1]=Utf8Head[1]) and (buf[2]=Utf8Head[2]) then     begin         FillChar(buf, SizeOf(buf), #0);         memoStream.Seek(3,soFromBeginning);         setlength(buf,memoStream.size-3);         memoStream.ReadBuffer(buf[0], memoStream.size-3);         result:=Utf8String(buf);         exit;     end else result:=UTF8Encode(WideString('文件不是UTF8格式!'));   finally     memoStream.Free;   end; end; // read unicode file function ReadUnicodeFile(const filename:string):WideString; var   memoStream:TFileStream;   buf:array of Char; begin   memoStream:=TFileStream.Create(filename, fmOpenRead);   try     setlength(buf,memoStream.size);     memoStream.ReadBuffer(buf[0], memoStream.size);     //unicode file     if (buf[0]=UnicodeHead[0]) and (buf[1]=UnicodeHead[1]) then     begin       FillChar(buf, SizeOf(buf), #0);       memoStream.Seek(2,soFromBeginning);       setlength(buf,memoStream.size-2);       memoStream.ReadBuffer(buf[0], memoStream.size-2);       result:=PWideChar(buf);       exit;     end else result:=WideString('文件不是UNICODE格式!');   finally     memoStream.Free;   end; end; procedure WriteUnicodeFile(const filename:string;mem:Widestring); var   wms:TMemoryStream; begin   wms:=TMemoryStream.Create;   wms.WriteBuffer(unicodeHead,length(unicodeHead));   wms.WriteBuffer(PChar(mem)^,length(mem)*2);   wms.SaveToFile(filename);   wms.Free; end; procedure WriteUtf8File(const filename:string;mem:Utf8String); var   wms:TMemoryStream; begin   wms:=TMemoryStream.Create;   wms.WriteBuffer(utf8Head,length(utf8Head));   wms.WriteBuffer(pchar(mem)^,length(Ansistring(mem)));   wms.SaveToFile(filename);   wms.Free; end; end.
直接下载单元文件FileExt.pas

转载于:https://www.cnblogs.com/xieyunc/archive/2009/05/02/9126598.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值