zoukankan
html css js c++ java
读写Unicode和UTF8格式文件
//---------------------------------------------- // Unit Name: FileExt.pas // Comment: 读写UTF8和UNICODE格式文件的一组函数 // Author: xieyunc 改自网络 // Date : 2007-11-23 10:47:59 //---------------------------------------------- unit FileExt; interface uses SysUtils,Windows,Types,Classes; const utf8Head: Array[0..2] of Char = (#239,#$bb,#$bf); unicodeHead: Array[0..1] of Char = (#255,#$fe); function ReadUtf8File(const filename:string):UTF8String; procedure WriteUtf8File(const filename:string;mem:Utf8String); function ReadUnicodeFile(const filename:string):WideString; procedure WriteUnicodeFile(const filename:string;mem:Widestring); implementation // read utf8 file function ReadUtf8File(const filename:string):Utf8String; var memoStream:TFileStream; buf:array of Char; begin memoStream:=TFileStream.Create(filename, fmOpenRead); try setlength(buf,memoStream.size); memoStream.ReadBuffer(buf[0], memoStream.size); //utf-8 file if (buf[0]=Utf8Head[0]) and (buf[1]=Utf8Head[1]) and (buf[2]=Utf8Head[2]) then begin FillChar(buf, SizeOf(buf), #0); memoStream.Seek(3,soFromBeginning); setlength(buf,memoStream.size-3); memoStream.ReadBuffer(buf[0], memoStream.size-3); result:=Utf8String(buf); exit; end else result:=UTF8Encode(WideString('文件不是UTF8格式!')); finally memoStream.Free; end; end; // read unicode file function ReadUnicodeFile(const filename:string):WideString; var memoStream:TFileStream; buf:array of Char; begin memoStream:=TFileStream.Create(filename, fmOpenRead); try setlength(buf,memoStream.size); memoStream.ReadBuffer(buf[0], memoStream.size); //unicode file if (buf[0]=UnicodeHead[0]) and (buf[1]=UnicodeHead[1]) then begin FillChar(buf, SizeOf(buf), #0); memoStream.Seek(2,soFromBeginning); setlength(buf,memoStream.size-2); memoStream.ReadBuffer(buf[0], memoStream.size-2); result:=PWideChar(buf); exit; end else result:=WideString('文件不是UNICODE格式!'); finally memoStream.Free; end; end; procedure WriteUnicodeFile(const filename:string;mem:Widestring); var wms:TMemoryStream; begin wms:=TMemoryStream.Create; wms.WriteBuffer(unicodeHead,length(unicodeHead)); wms.WriteBuffer(PChar(mem)^,length(mem)*2); wms.SaveToFile(filename); wms.Free; end; procedure WriteUtf8File(const filename:string;mem:Utf8String); var wms:TMemoryStream; begin wms:=TMemoryStream.Create; wms.WriteBuffer(utf8Head,length(utf8Head)); wms.WriteBuffer(pchar(mem)^,length(Ansistring(mem))); wms.SaveToFile(filename); wms.Free; end; end.
直接下载单元文件FileExt.pas
点击这里下载文件: FileExt.rar
谢祥选【小宇飞刀(xieyunc)】
查看全文
相关阅读:
jQuery
BOM与DOM操作
剑指offer 面试题10.1:青蛙跳台阶
剑指offer 面试题10:斐波那契数列
剑指offer 面试题9.1:用两个队列实现栈
剑指offer 面试题9.1:用两个队列实现栈
剑指offer 面试题9:用两个栈实现队列
剑指offer 面试题8:二叉树的下一个节点
剑指offer 面试题7:重建二叉树
剑指offer 树的基本操作:四种遍历方式
原文地址:https://www.cnblogs.com/xieyunc/p/2793593.html
最新文章
680. Valid Palindrome II
125. Valid Palindrome
什么是变量声明?
下面哪些是无效的Java标识?为什么?
列举两种不同类型的Java标识注释,并解释它们之间的区别。
列出下面几项的URL并解释每部分代表的含义
解释因特网1和万维网之间的区别。
以点对点的方式连接8台计算机共需要多少条传输线?如果是9台呢?10台呢?使用什么公式来计算这个结果?
解释局域(LAN)和广域网(WAN)之间的区别,它们之间的关系是什么?
查看你的个人计算机或者实验室里使用的计算机是如何和其他计算机通过网络连接的。它们是否已连接到因特网?画出基本的连接示意图。
热门文章
磁盘是随机存储设备,但不是随机存储器(RAM)。为什么?
给出随机存储器(RAM)和只读存储器(ROM)的差别
Django批量插入
Django与Ajax
安装模块相关
Django单表查询 常用字段
Django之模板层
Django--视图层
Django之路由层
Django入门
Copyright © 2011-2022 走看看