给客户做了一个批量识别图像并合成双层pdf的程序,最后客户需要生成的同时附带一份记事本文件,就是OCR过后的文本,并指定utf-8格式的。在处理utf-8时出现了点小问题,现在总结如下
首先 利用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文本的代码
引用
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;
分享到:
相关推荐
delphi保存读取utf-8的文本文件.mht
Delphi读写UTF-8、Unicode格式文本文件 .mht
最近的项目(Delphi开发),需要经常和java语言开发的系统进行数据交互(Socket通信方式),数据编码约定采用UTF-8编码。 令我无语的是:JAVA系统那边反映说,Delphi发的数据他们收到是乱码,而我这边(Delphi7,...
delphi 6-XE读取ANSI,unicode,unicode big,utf-8,utf-8BOM文件,保存utf8
delphi7调用delphi2009生成的dll文件会出现乱码问题。是unicode的原因 终于找到了UTF-8、Unicode格式转换函数
delphi操作utf-8转码HTTPEncode
Delphi中文本文件Utf-8和Ansi转换.mht
将ucs-2转换为utf-8代码集完整版
Delphi数据库读取程序-员工信息浏览,简单的读取数据库中的信息,一条一条的浏览信息,并将信息显示在对应的文本框中。
不错的delphi课程设计项目--delphi人才信息管理系统 不错的delphi课程设计项目--delphi人才信息管理系统 不错的delphi课程设计项目--delphi人才信息管理系统 不错的delphi课程设计项目--delphi人才信息管理系统 不错...
不错的delphi课程设计项目--delphi网页邮件抓发系统 不错的delphi课程设计项目--delphi网页邮件抓发系统 不错的delphi课程设计项目--delphi网页邮件抓发系统 不错的delphi课程设计项目--delphi网页邮件抓发系统 不错...
不错的delphi课程设计项目--家庭财务管理系统 不错的delphi课程设计项目--家庭财务管理系统 不错的delphi课程设计项目--家庭财务管理系统 不错的delphi课程设计项目--家庭财务管理系统 不错的delphi课程设计项目--...
delphi语言的modbus-tcp组件,完整功能。based on Indy 9 and Indy 10
iso-8859-1转GBK,GBK转iso-8859-1,在二维码生成过程中如果没有用UTF8编码可以使用编码转换方式解决乱码问题
使用indy自带的idhttp控件,用form表单(multipart/form-data)形式上传文件(图片,视频等)
DELPHI 7 学习---------摇号
解决DELPHI7下,WIDESTRING与STRING的转换问题.
不错的delphi课程设计项目--dephi+sqlserver2000试卷生成系统 不错的delphi课程设计项目--dephi+sqlserver2000试卷生成系统 不错的delphi课程设计项目--dephi+sqlserver2000试卷生成系统 不错的delphi课程设计项目--...
DELPHI 学习--------辐射渐变色
DELPHI 学习--------水平渐变色。