数说明:f文件名、s写入或读取的文件内容、hs文件头、b是否读写文件头。

procedure SaveUTF(f: string; s: string; b: boolean = true);var  ms: TMemoryStream;  hs: string;beginif s = '' then    exit;  ms := TMemoryStream.Create;if b thenbegin    hs := #$EF#$BB#$BF;    ms.Write(hs[1], 3);end;  s := AnsiToUtf8(s);  ms.Write(s[1], Length(s));  ms.Position := 0;  ms.SaveToFile(f);  ms.Free;end;

function LoadUTF(f: string; b: boolean = true): string;var  ms: TMemoryStream;  s, hs: string;begin  Result := '';if not FileExists(f) then    exit;  ms := TMemoryStream.Create;  ms.LoadFromFile(f);if b thenbegin    SetLength(hs, 3);    ms.Read(hs[1], 3);if hs <> #$EF#$BB#$BF thenbegin      ms.Free;      exit;end;    SetLength(s, ms.Size - 3);    ms.Read(s[1], ms.Size - 3);endelsebegin    SetLength(s, ms.Size);    ms.Read(s[1], ms.Size);end;  Result := Utf8ToAnsi(s);  ms.Free;end;

procedure SaveUnicode(f: string; s: string; b: boolean = true);var  ms: TMemoryStream;  hs: string;  ws: WideString;beginif s = '' then    exit;  ms := TMemoryStream.Create;if b thenbegin    hs := #$FF#$FE;    ms.Write(hs[1], 2);end;  ws := WideString(s);  ms.Write(ws[1], Length(ws) * 2);  ms.Position := 0;  ms.SaveToFile(f);  ms.Free;end;

function LoadUnicode(f: string; b: boolean = true): string;var  ms: TMemoryStream;  hs: string;  ws: WideString;begin  Result := '';if not FileExists(f) then    exit;  ms := TMemoryStream.Create;  ms.LoadFromFile(f);if b thenbegin    SetLength(hs, 2);    ms.Read(hs[1], 2);if hs <> #$FF#$FE thenbegin      ms.Free;      exit;end;    SetLength(ws, (ms.Size - 2) div 2);    ms.Read(ws[1], ms.Size - 2);endelsebegin    SetLength(ws, ms.Size div 2);    ms.Read(ws[1], ms.Size);end;  Result := AnsiString(ws);  ms.Free;end;

转载于:https://www.cnblogs.com/shuaixf/archive/2011/10/26/2225611.html

Delphi读写UTF-8、Unicode格式文本文件相关推荐

  1. 未测试 Delphi读写UTF-8、Unicode格式文本文件

    // UTF-8文件写入函数 procedure SaveUTFFile(const FileName: string; S: string; WriteHeader: Boolean = True) ...

  2. Delphi读写文本文件

    文本文件读写 前言: Delphi 支持三种文件类型: 文本文件.记录文件.无类型文件. 文本文件是以行为单位进行读.写的.由于每一行的长度不一定相同,不能计算出给定行在文件中的确切位置,因而只能顺序 ...

  3. UTF、Unicode、ASCII及中文编码

    一.Unicode缘起 Unicode是一种字符编码规范 . 1.国际标准ASCII编码 先从ASCII说起.ASCII是用来表示英文字符的一种编码规范,每个ASCII字符占用1个字节(8bits)  ...

  4. 创建Unicode格式的INI文件

    前段时间由于开发一个软件,需要调用别人的接口,虽然我的软件是Unicode编码,对方的模块也是Unicode编码,但是对方提供的接口却是Ansi接口,在非中文系统下,由于涉及到中文路径,导致Ansi和 ...

  5. warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失...

    从同事那里拷来两个头文件,一编译就出现了这个警告. 想要消除这个警告,几个方法: (1)转换Code文件为Unicode格式:   (2)在Project -> Properties -> ...

  6. 统计“3_人民日报语料”文本中的字符数和词数,把文件分别保存为 ansi, UTF8,UTF16,unicode 格式

    统计"3_人民日报语料"文本中的字符数和词数,把文件分别保存为 ansi, UTF8,UTF16,unicode 格式; 首先,统计文件的字符数,有两种方法.第一种是将文件复制到w ...

  7. 解决在使用 Qt 编译项目时出现 “C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode格式以防止数据丢失“ 的警告

    解决在使用 Qt 编译项目时出现 "C4819: 该文件包含不能在当前代码页(936)中表示的字符.请将该文件保存为 Unicode格式以防止数据丢失" 的警告 警告出现的原因:编 ...

  8. Linux命令之dos2unix - 将DOS格式文本文件转换成UNIX格式

    用途说明 dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter).DOS下的文本文件是以\r\n作为 ...

  9. warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失

    warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符.请将该文件保存为 Unicode 格式以防止数据丢失 [问题描述] Qt项目使用 VC++ 编译器出现此错误. war ...

  10. Qt使用MSVC编译器关闭“warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失”警告的方法

    Qt使用MSVC编译器关闭"warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符.请将该文件保存为 Unicode 格式以防止数据丢失"警告的方法 [问 ...

最新文章

  1. PHP复杂度,php 常用算法和时间复杂度
  2. 暴雪帝国辉煌能否延续
  3. html出现403错误信息,网站(HTTP)出现403错误集锦,请对号入座;
  4. setTimeout、setInterval解刨
  5. 山寨机来了:小米10至尊、透明版只要688
  6. 深入理解python.md_从python角度,理解进程,线程,协程.md-Go语言中文社区
  7. 阿里推出“阿里云网盘”App;Linux 发布 29 周年​| 极客头条
  8. Laravel 队列发送邮件
  9. java如何算log_用java代码计算Log(a)b
  10. .net html5 微信支付接口,解析微信支付的实现方法(.NET版)
  11. 如何修改图片尺寸,分辨率大小,三种方式对比。
  12. RandomUtils 随机生成中文姓名,性别,Email,手机号,住址
  13. EXCHANGE 2016证书续期
  14. 考研数学笔记(更新中)
  15. 数据准备脚本:Python Pandas OR esProc SPL?
  16. SWIFT电文 MT940客户对账单 报文格式说明
  17. 中山マミ - 彼女×彼女×彼女 ~今夜はぎゅっと抱きしめてね~
  18. 输入90输公因数java_关于Java中的几个数论中的知识
  19. 【数据挖掘】数据挖掘总结 ( 贝叶斯分类器示例 ) ★
  20. spring mysql ssl_MySQL 使用 SSL 连接配置详解

热门文章

  1. GDAL查看DEM高程数据(java)
  2. JavaScript由浅到深【含案例源码】
  3. maven私服搭建:docker安装Sonatype Nexus以及寻找admin用户对应的随机初始密码
  4. 每天一道剑指offer-翻转单词顺序列
  5. ubuntu切换用户root时认证失败
  6. windows 64位sed.exe_32位,64位,x86,x64到底是什么关系?差距居然这么大
  7. python lambda表达式及用法_Python中lambda表达式的常见用法
  8. C语言字母标题,C语言题目!!
  9. python暂停和恢复_Scrapy如何暂停/恢复工作?
  10. Javascript:radio单击触发事件