Delphi读写UTF-8、Unicode格式文本文件
发布时间:2020-12-15 10:00:05 所属栏目:大数据 来源:网络整理
导读:// UTF-8文件写入函数 procedure SaveUTFFile (const FileName: string; S: string; WriteHeader: Boolean = True); var ? MemStream: TMemoryStream; ? HeaderStr: String; begin ? if S = '' then Exit; ? MemStream := TMemoryStream.Create; ? try ??? i
// UTF-8文件写入函数
? MemStream := TMemoryStream.Create;
? try ??? if WriteHeader then ??? begin ????? HeaderStr:=#$EF#$BB#$BF; ????? MemStream.Write(HeaderStr[1],3); ??? end;
??? S := AnsiToUtf8(S);
??? MemStream.Write(S[1],Length(S)); ??? MemStream.Position := 0;
??? MemStream.SaveToFile(FileName);
? finally ??? MemStream.Free; ? end; end;
?
// UtF-8文件读取函数 function LoadUTFFile(const FileName: string; ReadHeader: Boolean = True): string; var ? MemStream: TMemoryStream; ? S,HeaderStr:string; begin ? Result:=''; ? if not FileExists(FileName) then Exit;
? MemStream := TMemoryStream.Create;
? try ??? MemStream.LoadFromFile(FileName); ??? if ReadHeader then ??? begin ????? SetLength(HeaderStr,3); ????? MemStream.Read(HeaderStr[1],3);
????? if HeaderStr = #$EF#$BB#$BF then
????? begin ??????? SetLength(S,MemStream.Size - 3); ??????? MemStream.Read(S[1],MemStream.Size - 3); ????? end; ??? end else ??? begin ????? SetLength(S,MemStream.Size); ????? MemStream.Read(S[1],MemStream.Size); ??? end; ??? ??? Result := Utf8ToAnsi(S); ? finally ??? MemStream.Free; ? end; end;
?
// Unicode文件写入函数 procedure SaveUnicodeFile(const FileName:string; const S: string; WriteHeader: Boolean = True); var ? MemStream: TMemoryStream; ? HeaderStr: string; ? WStr: WideString; begin ? if S = '' then exit;
? MemStream := TMemoryStream.Create;
? try ??? if WriteHeader then ??? begin ????? HeaderStr := #$FF#$FE; ????? MemStream.Write(HeaderStr[1],2); ??? end; ??? ??? WStr := WideString(S); ??? MemStream.Write(WStr[1],Length(WStr)*2); ??? MemStream.Position := 0; ??? MemStream.SaveToFile(FileName); ? finally ??? MemStream.Free; ? end; end;
?
// Unicode文件读取函数
function LoadUnicodeFile(const FileName: string; ReadHeader: Boolean = True): string; var ? MemStream: TMemoryStream; ? FlagStr: String; ? WStr: WideString; begin ? Result := ''; ? if not FileExists(FileName) then Exit;
? MemStream := TMemoryStream.Create;
? try ??? MemStream.LoadFromFile(FileName);
??? if ReadHeader then ??? begin ????? SetLength(FlagStr,2); ????? MemStream.Read(FlagStr[1],2); ????? ????? if FlagStr = #$FF#$FE then ????? begin ??????? SetLength(WStr,(MemStream.Size-2) div 2); ??????? MemStream.Read(WStr[1],MemStream.Size - 2); ????? end; ??? end else ??? begin ????? SetLength(WStr,MemStream.Size div 2); ????? MemStream.Read(WStr[1],MemStream.Size); ??? end; ??? ??? Result := AnsiString(WStr); ? finally ??? MemStream.Free; ? end; end;
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |