Delphi读写UTF-8、Unicode格式文本文件
// UTF-8文件写入函数
procedure SaveUTFFile(const FileName: string; S: string; WriteHeader: Boolean = True);
var
MemStream: TMemoryStream;
HeaderStr: String;
begin
if S = '' then Exit;
try
if WriteHeader then
begin
HeaderStr:=#$EF#$BB#$BF;
MemStream.Write(HeaderStr[1], 3);
end;
MemStream.Write(S[1], Length(S));
MemStream.Position := 0;
finally
MemStream.Free;
end;
end;
function LoadUTFFile(const FileName: string; ReadHeader: Boolean = True): string;
var
MemStream: TMemoryStream;
S, HeaderStr:string;
begin
Result:='';
if not FileExists(FileName) then Exit;
try
MemStream.LoadFromFile(FileName);
if ReadHeader then
begin
SetLength(HeaderStr, 3);
MemStream.Read(HeaderStr[1], 3);
begin
SetLength(S, MemStream.Size - 3);
MemStream.Read(S[1], MemStream.Size - 3);
end;
end else
begin
SetLength(S, MemStream.Size);
MemStream.Read(S[1], MemStream.Size);
end;
Result := Utf8ToAnsi(S);
finally
MemStream.Free;
end;
end;
procedure SaveUnicodeFile(const FileName:string; const S: string; WriteHeader: Boolean = True);
var
MemStream: TMemoryStream;
HeaderStr: string;
WStr: WideString;
begin
if S = '' then exit;
try
if WriteHeader then
begin
HeaderStr := #$FF#$FE;
MemStream.Write(HeaderStr[1], 2);
end;
WStr := WideString(S);
MemStream.Write(WStr[1], Length(WStr)*2);
MemStream.Position := 0;
MemStream.SaveToFile(FileName);
finally
MemStream.Free;
end;
end;
function LoadUnicodeFile(const FileName: string; ReadHeader: Boolean = True): string;
var
MemStream: TMemoryStream;
FlagStr: String;
WStr: WideString;
begin
Result := '';
if not FileExists(FileName) then Exit;
try
MemStream.LoadFromFile(FileName);
begin
SetLength(FlagStr, 2);
MemStream.Read(FlagStr[1], 2);
if FlagStr = #$FF#$FE then
begin
SetLength(WStr, (MemStream.Size-2) div 2);
MemStream.Read(WStr[1], MemStream.Size - 2);
end;
end else
begin
SetLength(WStr, MemStream.Size div 2);
MemStream.Read(WStr[1], MemStream.Size);
end;
Result := AnsiString(WStr);
finally
MemStream.Free;
end;
end;
Delphi读写UTF-8、Unicode格式文本文件的更多相关文章
- 未测试 Delphi读写UTF-8、Unicode格式文本文件
// UTF-8文件写入函数 procedure SaveUTFFile(const FileName: string; S: string; WriteHeader: Boolean = True) ...
- delphi读写文本文件
delphi读写文本文件 在工作中遇到了这样一个问题,使用PLSQL将一个表的数据转化成一些列的insert语句存储到一个.sql文本中,我本来想使用access数据库中的查询视图一次执行这些语句 ...
- delphi读写INI系统配置文件
delphi读写INI系统配置文件 一.调用delphi内建单元 uses System.IniFiles; .使用类TIniFile .类TIniFile的主要方法和函数: {$IFDEF MSWI ...
- 创建Unicode格式的INI文件
前段时间由于开发一个软件,需要调用别人的接口,虽然我的软件是Unicode编码,对方的模块也是Unicode编码,但是对方提供的接口却是Ansi接口,在非中文系统下,由于涉及到中文路径,导致Ansi和 ...
- Qt读取ANSI格式文件——利用QTextCodec将其他编码格式转换为Unicode格式
Qt使用Unicode来表示字符串.但是通常需要访问一些非Unicode格式的字符串,例如打开一个GBK编码的中文文本文件,甚至一些非Unicode编码的日文,俄文等. Qt提供了QTextCodec ...
- Qt读取ANSI格式文件——利用QTextCodec将其他编码格式的QByteArray转换为Unicode格式,或者从文件中读出后直接做转换
t使用Unicode来表示字符串.但是通常需要访问一些非Unicode格式的字符串,例如打开一个GBK编码的中文文本文件,甚至一些非Unicode编码的日文,俄文等. Qt提供了QTextCodec类 ...
- 记事本 该文件含有unicode格式的字符 点确定就变乱码了,notePad++,UltraEditor等编辑器打开也变乱码?
--问题 之前一直都是好的 今天电脑打开,发现电脑所有的TXT记事本,点开来全是乱码,甚至下过来的TXT,或者自己新建的TXT,打上中文字,点保存会弹出 该文件含有unicode格式的字符什么什么的, ...
- [转] 将DOS格式文本文件转换成UNIX格式
点击此处阅读原文 用途说明 dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter).DOS下的文本文 ...
- 【转】warning C4819,该文件保存为 Unicode 格式以防止数据丢失,处理方法
以下的解决方案只是把错误给屏蔽掉而已,并不能真正解决这个警告.仅供参考! 当项目引用到外部源代码后,经常出现4819错误,警告信息如下: warning C4819: 该文件包含不能在当前代码页(93 ...
随机推荐
- CentOS6.5安全策略设置
应公司内部网站等级测评的需求,正逐渐加强系统安全防护 密码策略设置 检查方法: 使用命令 #cat /etc/login.defs|grep PASS查看密码策略设置 备份方法: cp -p /etc ...
- 64位CentOS6.2安装erlang及rabbitmqServer
CentOS 6.2 64bit 安装erlang及RabbitMQ Server 1.操作系统环境(CentOS 6.2 64bit) [root@HAproxy ~]# cat /etc/issu ...
- javascript重点笔记
操作符之间的优先级(高到低):算术操作符 >比较操作符 >逻辑操作符 >"="赋值符号 算术运算符
- 用来解析,格式化,存储和验证国际电话号码:libphonenumber
用来解析,格式化,存储和验证国际电话号码:libphonenumber libphonenumber是Google的公共Java.C++和Javascript库用来解析,格式化,存储和验证国际电话号码 ...
- 使用Xshell生成key,避免password登录linux
我们通常Xshell使用命令ssh user@ip远程登录linux,这将促使我们进入password更麻烦的,通缉免费password日志的话,我们可以生成相应的key.然后把遥控器server上, ...
- 深入理解 Spring 事务原理【转】
本文转自码农网 – 吴极心原创 连接地址:http://www.codeceo.com/article/spring-transactions.html 一.事务的基本原理 Spring事务的本质其 ...
- qingshow “不积跬步无以至千里,不积小流无以成江海”。--荀子《劝学篇》 用tomcat+花生壳搭建自己的web服务器+域名(参考)
链接地址:http://www.blogjava.net/qingshow/archive/2010/01/17/309846.html 用tomcat搭建web服务器 目标:免费拥有自己的网站及域名 ...
- spring+mybatis利用interceptor(plugin)兑现数据库读写分离
使用spring的动态路由实现数据库负载均衡 系统中存在的多台服务器是"地位相当"的,不过,同一时间他们都处于活动(Active)状态,处于负载均衡等因素考虑,数据访问请求需要在这 ...
- VS2008+Qt 项目目录
1.项目开发环境:VS2008,QT4.7 2.项目的目录: 1)PETCT是解决方案名字 2)Bin目录存放所有动态链接库和执行档,包括自己的产出和第三方库,区分Release和Debug两个版本. ...
- twemproxy 简介
twemproxy,也叫nutcraker.是twtter开源的一个redis和memcache代理服务器. redis作为一个高效的缓存服务器,非常具有应用价值.但是当使用比较多的时候,就希望可以通 ...