Delphi如何读写支持utf-8编码的文件?

2026-04-10 21:452阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计481个文字,预计阅读时间需要2分钟。

Delphi如何读写支持utf-8编码的文件?

读取UTF-8编码文件内容:csharpfunction LoadUTF8File(AFileName: string): string;var ffileStream: TFileStream;var fAnsiBytes: string;var S: string;begin ffileStream :=TFileStream.Create(AFileName, fmOpenRead); SetLength(S, ffileStream.Size); ffileStream.Read(S[1], Length(S)); ffileStream.Free;end;

读取UTF-8格式的文件内容

function LoadUTF8File(AFileName: string): string; var ffileStream:TFileStream; fAnsiBytes: string; S: string; begin ffileStream:=TFileStream.Create(AFileName,fmOpenRead); SetLength(S,ffileStream.Size); ffileStream.Read(S[1],Length(S)); fAnsiBytes:= UTF8Decode(Copy(S,4,MaxInt)); Result:= fAnsiBytes; end;

写入UTF-8编码格式的文件

procedure SaveUTF8File(AContent:string;AFileName: string); var ffileStream:TFileStream; futf8Bytes: string; S: string; begin ffileStream:=TFileStream.Create(AFileName,fmCreate); futf8Bytes:= UTF8Encode(AContent); S:=#$EF#$BB#$BF; ffileStream.Write(S[1],Length(S)); ffileStream.Write(futf8Bytes[1],Length(futf8Bytes)); ffileStream.Free; end;

利用delphi自带的UTF8Encode函数,将普通字符转换为utf-8编码

创建一个流,MemoryStream或FileStream都可

函数看起来如下


引用

procedure SaveUTF8File(AContent:WideString;AFileName: string); var ffileStream:TFileStream; futf8Bytes: string; S: string; begin ffileStream:=TFileStream.Create(AFileName,fmCreate); futf8Bytes:= UTF8Encode(AContent); ffileStream.Write(futf8Bytes[1],Length(futf8Bytes)); ffileStream.Free; end;


运行后查看生成的文件,全是乱码,上网搜索发现

unicode文本文件:头两个字符分别是FF FE(16进制)
utf-8文本文件:头两个字符分别是EF BB(16进制)

原来是忘了把文件头加进去了

于是加入代码后

procedure SaveUTF8File(AContent:WideString;AFileName: string); var ffileStream:TFileStream; futf8Bytes: string; S: string; begin ffileStream:=TFileStream.Create(AFileName,fmCreate); futf8Bytes:= UTF8Encode(AContent); S:=#$EF#$BB#$BF; ffileStream.Write(S[1],Length(S)); ffileStream.Write(futf8Bytes[1],Length(futf8Bytes)); ffileStream.Free; end;

保存文件后查看,还是乱码。找了半天问题最后终于发现问题出现在声明的参数WideString上,改成string就没问题了。

最后生成 的代码如下

procedure SaveUTF8File(AContent:string;AFileName: string); var ffileStream:TFileStream; futf8Bytes: string; S: string; begin ffileStream:=TFileStream.Create(AFileName,fmCreate); futf8Bytes:= UTF8Encode(AContent); S:=#$EF#$BB#$BF; ffileStream.Write(S[1],Length(S)); ffileStream.Write(futf8Bytes[1],Length(futf8Bytes)); ffileStream.Free; end;

再附上一段读取utf-8文本的代码

Delphi如何读写支持utf-8编码的文件?

function LoadUTF8File(AFileName: string): string; var ffileStream:TFileStream; fAnsiBytes: string; S: string; begin ffileStream:=TFileStream.Create(AFileName,fmOpenRead); SetLength(S,ffileStream.Size); ffileStream.Read(S[1],Length(S)); fAnsiBytes:= UTF8Decode(Copy(S,4,MaxInt)); Result:= fAnsiBytes; end;

标签:

本文共计481个文字,预计阅读时间需要2分钟。

Delphi如何读写支持utf-8编码的文件?

读取UTF-8编码文件内容:csharpfunction LoadUTF8File(AFileName: string): string;var ffileStream: TFileStream;var fAnsiBytes: string;var S: string;begin ffileStream :=TFileStream.Create(AFileName, fmOpenRead); SetLength(S, ffileStream.Size); ffileStream.Read(S[1], Length(S)); ffileStream.Free;end;

读取UTF-8格式的文件内容

function LoadUTF8File(AFileName: string): string; var ffileStream:TFileStream; fAnsiBytes: string; S: string; begin ffileStream:=TFileStream.Create(AFileName,fmOpenRead); SetLength(S,ffileStream.Size); ffileStream.Read(S[1],Length(S)); fAnsiBytes:= UTF8Decode(Copy(S,4,MaxInt)); Result:= fAnsiBytes; end;

写入UTF-8编码格式的文件

procedure SaveUTF8File(AContent:string;AFileName: string); var ffileStream:TFileStream; futf8Bytes: string; S: string; begin ffileStream:=TFileStream.Create(AFileName,fmCreate); futf8Bytes:= UTF8Encode(AContent); S:=#$EF#$BB#$BF; ffileStream.Write(S[1],Length(S)); ffileStream.Write(futf8Bytes[1],Length(futf8Bytes)); ffileStream.Free; end;

利用delphi自带的UTF8Encode函数,将普通字符转换为utf-8编码

创建一个流,MemoryStream或FileStream都可

函数看起来如下


引用

procedure SaveUTF8File(AContent:WideString;AFileName: string); var ffileStream:TFileStream; futf8Bytes: string; S: string; begin ffileStream:=TFileStream.Create(AFileName,fmCreate); futf8Bytes:= UTF8Encode(AContent); ffileStream.Write(futf8Bytes[1],Length(futf8Bytes)); ffileStream.Free; end;


运行后查看生成的文件,全是乱码,上网搜索发现

unicode文本文件:头两个字符分别是FF FE(16进制)
utf-8文本文件:头两个字符分别是EF BB(16进制)

原来是忘了把文件头加进去了

于是加入代码后

procedure SaveUTF8File(AContent:WideString;AFileName: string); var ffileStream:TFileStream; futf8Bytes: string; S: string; begin ffileStream:=TFileStream.Create(AFileName,fmCreate); futf8Bytes:= UTF8Encode(AContent); S:=#$EF#$BB#$BF; ffileStream.Write(S[1],Length(S)); ffileStream.Write(futf8Bytes[1],Length(futf8Bytes)); ffileStream.Free; end;

保存文件后查看,还是乱码。找了半天问题最后终于发现问题出现在声明的参数WideString上,改成string就没问题了。

最后生成 的代码如下

procedure SaveUTF8File(AContent:string;AFileName: string); var ffileStream:TFileStream; futf8Bytes: string; S: string; begin ffileStream:=TFileStream.Create(AFileName,fmCreate); futf8Bytes:= UTF8Encode(AContent); S:=#$EF#$BB#$BF; ffileStream.Write(S[1],Length(S)); ffileStream.Write(futf8Bytes[1],Length(futf8Bytes)); ffileStream.Free; end;

再附上一段读取utf-8文本的代码

Delphi如何读写支持utf-8编码的文件?

function LoadUTF8File(AFileName: string): string; var ffileStream:TFileStream; fAnsiBytes: string; S: string; begin ffileStream:=TFileStream.Create(AFileName,fmOpenRead); SetLength(S,ffileStream.Size); ffileStream.Read(S[1],Length(S)); fAnsiBytes:= UTF8Decode(Copy(S,4,MaxInt)); Result:= fAnsiBytes; end;

标签: