Delphi 判断并删除utf8文本文件中的前三个字节BOM

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

{-------------------------------------------------------------------------------
过程名:    DelBomFromUtf8File 判断并删除utf8文本文件中的前三个字节BOM
参数:      filename:string   1.文件名
返回值:    boolean   是否删除

-------------------------------------------------------------------------------}
function TReplaceString.DelBomFromUtf8File(filename:string):boolean;
const
  UTF8_FLAG=$EFBB;
var
  fsRead,fsWrite:TFileStream;
  w:word;
  b:byte;
  filename_tmp:string;
  len:integer;
function WordLoHiExchange(w: Word): Word; register;
asm
   XCHG AL, AH
end;
begin
  result:=false;
  if(fileexists(filename)=false)then exit;
  fsRead:=TFileStream.Create(filename, fmOpenRead or fmShareDenyNone); // or fmOpenWrite
try
  fsRead.Seek(0, soFromBeginning);
  fsRead.Read(w,2);
  w:= WordLoHiExchange(w);
  if w=UTF8_FLAG then
  begin
    fsRead.Read(b,1);
    len:=fsRead.Size-fsRead.Position;
    filename_tmp:=filename+'tmp';
    fsWrite:=TFileStream.Create(filename_tmp, fmCreate);
    fsWrite.CopyFrom(fsRead, len);
    fsWrite.Free;
    result:=true;
  end;
finally
  fsRead.Free;
  if(result)then
  begin
    deletefile(filename);
    movefile(pchar(filename_tmp),pchar(filename));
  end;
end;


 

C++Builder多语言支持实战:资源DLL动态切换技术详解 软件国际化与本地化是软件开发中的重要环节,其核心原理在于将用户界面文本、图像等资源与程序逻辑代码分离。通过资源动态加载技术,可以在不重新编译程序的情况下实现多语言支持,这大大提升了软件的可维护性和部署灵活性。在Windows桌面开发中,资源动态链接库(DLL)是实现这一目标的经典方案,它利用操作系统原生资源管理机制,实现运行时语言资源的切换。本文通过一个具体的C++Builder 6项目Demo,深入剖析了如何设计语言管理器(LangManager)、组织多语言资源文件(.rc)、以及实现窗体资源的动态重载 阅读详情

相关推荐

Delphi 13.1专用KonopkaControls 8.0.2安装与版本兼容性详解

Delphi控件包本质是编译器ABI、RTL/VCL运行时与设计时架构深度耦合的二进制合约,而非通用资源集合。其核心原理在于版本指纹校验——通过DCU嵌入SHA256校验块、设计时包硬编码dclusr131依赖、BPL镜像基址绑定等三重机制,确保与Delphi 13.1的RTL接口契约、堆栈对齐规则及IDE插件宿主完全匹配。这种强版本约束带来关键工程价值:规避高DPI渲染失真、多线程UI死锁、无障碍支持缺失等现代桌面应用生存级缺陷。典型应用场景包括医疗设备UI(需ISO/IEC 62304合规)、金融高频数

weixin_30832405的博客 390

什么是BOM头,如何去掉BOM头.zip

什么是BOM头,如何去掉BOM头.zip

BOM进销存管理,仿管家婆Delphi源码

BOM进销存管理,仿管家婆Delphi源码```

Delphi编程中“流”的应用

什么是流?流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具。在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的,而不用关心流的另一头数据的真正流向。流不但可以处理文件,还可以处理动态内存、网络数据等多种数据形式。如果你对流的操作非常熟练,在程序中利用流的方便性,写起程序会大大提高效率的。   下面,笔者通过四个实例:EXE文件加密器、电子贺卡、自

afraqiu的专栏 896

Delphi在二进制文件头部加数据或删除数据

今天想要在一个二进制文件头部加上一个特殊标志,在后续处理时又需要把该标志先移除。在网上搜了很久,没有很好的解决办法,最后想了个办法,用一个临时Stream来处理。上代码:   const EncFileHeader = '1234567890'; //特殊标志 function EncryptFile(inFile, outFile: PChar; password: PCh...

听雨轩 632

delphi FileStream中Seek用法详情

TStream 有 Seek() 方法, 它的子类们(TFileStream、TMemoryStream、TBytesStream、TStringStream、TResourceStream、TStreamAdapter、THandleStream...)也都有 Seek() 方法, 且用法一样.方法将文件指针移动到指定位置(以字节为单位)。Seek() 方法有两个重载, 就是可以使用常数、也可以使用枚举来标识偏移的起始点.方法的参数: Seek(偏移量, 偏移的起始点), 返回值是偏移后的当位置.

1024

delphi 判断删除utf8文本文件中的三个字节BOM

判断删除utf8文本文件中的三个字节BOM

byc6352的专栏 729

Delphi 判断文件是否为UTF-8-BOM的文件

Delphi 判断文件是否为UTF-8-BOM的文件

小印丶的笔记 912

移植Delphi桌面代码到移动平台

转自: http://www.52jike.com/thread-34-1-1.html 本文讲述的是如何移植现有的Delphi桌面代码,使之可以用Delphi移动编译器编译。 DCCIOS32.EXE, Delphi iOS模拟器编译器。 DCCIOSARM.EXE, Delphi iOS 设备编译器 DCCAARM.EXE, Delphi Android编译器

gzlxclxc的专栏 1441

UTF-8有签名和无签名的区别

当有签名的UTF-8编码内容被解析器解析时,解析器直接根据签名即可判断出使用UTF-8编码来进行解析,当无签名时,解析器会根据内容的编码来进行判别。所以,有签名的将更容易被解析器以正确的编码方式进行解析。 有签名也就是带 BOM 信息,无签名就是不带 BOMBOM,即 Byte Order Mark,也即字节流标记,它是用来让应用程序识别所用的编码的。UTF-8 的 BOM 是 0xEFBBB...

weixin_30667649的博客 163

UTF8BOM

<br />UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行,可能会引起错误。(在Linux下看时,文件开头多了个<feff>)Window下用Notepad++写php文件,编码是UTF-8时就带有这种BOM。用Notepad++时选择以UTF-8无BOM格式编码,解决这个问题。

一步一跳 2389

K3 BOM对比工具 20120902.rar

K3 BOM对比工具 20120902.rar

DELPHI EXCEL操作 实现BOM表对比工具 含源代码

DELPHI EXCEL操作 实现BOM表对比工;希望对大家会有一定的帮助

导出BOM工具V1.0.rar DELPHI

导出BOM工具V1.0.rar DELPHI 导出BOM工具V1.0.rar DELPHI 导出BOM工具V1.0.rar DELPHI

C# 中写入文件时BOM头的处理

在c#中向一个文件中写入数据时经常会调用StreamWriter writer = new StreamWriter(filePath, false, Encoding.UTF8);   后一个参数决定了数据编码。但是这样写入的文件数据会包含BOM头,好多编辑器无法识别格式。去除BOM头的方法是:StreamWriter writer = new StreamWriter(writeFile, f...

杰克李的博客 2461

Delphi 10 UTF8文件读写

 网上找了好多,都是错的。 什么TStrings,Memo,S := #$EF#$BB#$BF; 存出来都是错的。16进制一看都不对。 还是用流靠谱。 function LoadUTF8File(FileName: string): string; var SS: TStringStream; begin SS := TStringStream.Create('', TEncod...

虚幻真实的博客 2628

Delphi UTF8文件读写操作

function LoadUTF8File(FileName: string): string; var SS: TStringStream; begin SS := TStringStream.Create('', TEncoding.UTF8); SS.LoadFromFile(FileName); Result := SS.DataString; end; proc...

wh445306 1018

展开BOM

原帖地址http://community.csdn.net/Expert/topic/3384/3384941.xml?temp=.6640436---------------------------------------------------------------------------测试数据CREATE TABLE [dbo].[BOM_DETAIL] ( [PKID] [in

zjcxc(邹建)的Blog - SQL Server 8063

计算BOM

CREATE function fBOMmat(@matcode varchar(16))returns @bom table(Num smallint,MatCode varchar(16),Coef real,String varchar(1000),advannum int)asbeginif exists(select * from T142 where matcode

#一起看斜阳#的专栏 1422
上一篇: Delphi 调用Windows 远程桌面核心代码
下一篇: Delphi 批量替换文件中的字符串
byc6352
博客等级 码龄25年 296粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值