`

delphi保存读取utf-8的文本文件

阅读更多
给客户做了一个批量识别图像并合成双层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的文本文件.mht

    Delphi读写UTF-8、Unicode格式文本文件 .mht

    Delphi读写UTF-8、Unicode格式文本文件 .mht

    UTF8与ansi string转换处理(DELPHI7开发)

    在描述中提到的“delphi 开发的UTF8 ansistring转换动态库”是一个由DELPHI编写的DLL文件,名为UTF8_DLL.dll。DLL文件允许其他应用程序通过接口调用来执行特定的功能,这里的功能是进行UTF8和ANSI String之间的转换...

    字符编码转换(GB2312,UTF-8,UNICODE)

    例如,一个GB2312编码的文件在UTF-8环境下打开,由于两者编码方式不同,可能会看到无法识别的字符。 批量和单个文件的编码转换过程通常涉及以下几个步骤: 1. 验证源文件的当前编码:首先需要确定文件的原始编码,...

    xe10_utf_8转换

    8. **文本编辑器组件**:在GUI应用程序中,如果使用了像TMemo这样的文本编辑组件,记得设置其编码为UTF-8,以便正确显示和保存UTF-8编码的文本。 9. **错误处理**:在处理UTF-8转换时,可能出现编码错误,如非法...

    无头BOM的UTF8文件判断

    标题中的“无头BOM的UTF8文件判断”是指在处理UTF-8编码的文本文件时,关注那些没有字节顺序标记(Byte Order Mark,简称BOM)的文件。BOM是一个可选的Unicode签名,通常出现在文件的开头,用于标识文件采用的字符...

    TXT Delphi操作实例:读取、写入、保存等.rar

    这个实例还可能展示了如何处理更复杂的情况,比如处理不同编码的TXT文件(如UTF-8或ANSI),或者处理包含特殊字符和换行格式的文本。 总的来说,这个Delphi TXT操作实例将帮助开发者熟练掌握基本的文件操作,以及在...

    delphi Read and Write Unicode

    在Delphi中读取UTF-8文件,可以使用`TFile.OpenRead`或`TFileStream`来打开文件,然后通过`TEncoding.UTF8`进行解码。例如: ```delphi uses System.IOUtils, System.Classes, System.SysUtils; var FileStream: ...

    delphi 文件的读取

    当处理不同编码的文本文件时,例如UTF-8或ANSI,需要使用`AnsiStrings`或`UnicodeStrings`,并注意转换过程。 7. **文件流和缓冲** 使用`TFileStream`时,可以自定义缓冲大小以优化性能。`TMemoryStream`还可以...

    UTF8文本处理动态库

    UTF8文本处理动态库,如标题所示,是一个专门用于处理UTF8编码格式的库,它提供了一系列API接口,使得开发者可以方便地进行UTF8字符串与AnsiString(或通常所说的string类型)之间的转换。AnsiString是Delphi和C++...

    readtxtfile_delphi_Delphi读取CFG_

    在Delphi编程环境中,处理文本文件是常见的任务之一,特别是在配置文件(如CFG)的读取和解析上。本文将详细讲解如何使用Delphi的`LoadFromFile`方法来逐行读取CFG文件的内容,以及相关的知识扩展。 首先,`...

    UTF8_STR.RAR_delphi Utf8_delphi string_delphi utf 8 gb23_delphi

    5. **文件读写**:当你需要读取或写入UTF8编码的文件时,要确保使用正确的编码设置。例如,使用`TFileStream`和`TTextReader`或`TTextWriter`时,要指定`TEncoding.UTF8`。 6. **字符串操作**:在处理UTF8字符串时...

    文本读取操作,基于Delphi实现..rar

    Delphi支持多种字符编码,如ASCII、Unicode(UTF-16LE)和UTF-8。在读取或写入文本文件时,必须指定正确的编码,以确保正确处理非ASCII字符。例如,使用TFile.WriteAllText时,可以指定一个TEncoding对象来指定编码...

    utf8处理接口动态库(Delphi7开发)

    这个功能需要读取UTF8编码的文本文件,然后将内容转换为ANSIString。这通常通过File Handling函数读取文件内容,然后使用特定的转换函数,如Delphi的AnsiString构造函数结合低级别的字符转换函数,将读取的UTF8字节...

    delphi 流读写格式化记录文件

    // 假设数据是以UTF-8编码 // 处理RecordData,例如分割字段 // ... finally MemoryStream.Free; FileStream.Free; end; end; ``` 对于更复杂的格式化记录文件,如XML或JSON,我们可以利用Delphi的内置XML...

    Delphi中判断文件是否为文本文件的函数

    此外,对于Unicode文本文件(如UTF-8、UTF-16等),这个方法可能会错误地将它们识别为非文本文件,因为这些格式可能包含字节值为0的字节。更精确的检测可能需要检查文件头标识或者分析字符编码。然而,对于大多数...

    Delphi非ADO建立并读取.DAT数据库文件.rar

    在处理文本时,确保使用正确的编码(如UTF-8),或者在读写字符串时考虑编码转换。尽管窗体显示问题存在,但不影响程序的实际运行。 标签 "Delphi源码-数据库应用" 指出这是一个关于Delphi编程和数据库交互的实例。...

    DELPHI中获取汉字ASCII的例子

    总的来说,虽然汉字不能直接转换为ASCII,但在DELPHI中,我们可以借助Unicode、UTF-8和其他编码形式,间接地在ASCII环境下表示汉字。这涉及到对字符编码的理解和使用适当的函数或类库进行转换。在实际开发中,了解...

    VCB API UCS 与UTF编码转换

    例如,如果从UTF-8文本文件读取数据,可能需要先用`Utf8ToWideChar`转换到UCS-2,然后再处理。相反,如果要将数据写入UTF-8文件,则需先通过`WideCharToUtf8`完成转换。 在“VCB API UCS 与UTF编码转换.txt”这个...

    Delphi 读取DAT格式的数据库.rar

    标题 "Delphi 读取DAT格式的数据库" 指示了一个使用 Delphi 开发的程序,该程序设计用于在 Delphi7 开发环境中读取 DAT 格式的数据库文件。DAT 文件格式通常用于存储各种类型的数据,但它本身并不是标准的数据库格式...

Global site tag (gtag.js) - Google Analytics