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 ...
随机推荐
- Jquery学习笔记:操作form表单元素之一(文本框和下拉框)
一.概述 在web页面开发中,经常需要获取和设置表单元素的值(如文本框中的内容),特别是在ajax应用中,更是常态.本文系统的介绍下如何操作. 同操作其它html元素一样,操作的过程差不多. 第一步, ...
- MySQL中select * for update锁表的问题(转)
由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行Table Lock (将整个资料 ...
- VS2008 Project : error PRJ0019: 某个工具从以下位置返回了错误代码: "正在执行生成后事件..."解决方案
右键工程属性 -> 配置属性 -> 生成事件 ->生成后事件,命令行中的路径加上双引号,如 copy $(ProjectDir)\export\win32\Debug\$(Proje ...
- Js脚本实现选项卡的实例
效果演示: 具体代码: <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http:/ ...
- Add custom and listview web part to a page in wiki page using powershell
As we know, Adding list view web part is different from custom web part using powershell, what's mor ...
- bzoj 1901: Zju2112 Dynamic Rankings(树套树)
1901: Zju2112 Dynamic Rankings 经典的带改动求区间第k小值问题 树套树模板,我是用的线段树套splay实现的,并且用的数组模拟的,所以可能空间略大,bzoj过了,zoj过 ...
- 分享一个获取代理ip的python函数
分享一个获取代理ip的python函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #coding:utf-8 from bs4 import Beaut ...
- 基于visual Studio2013解决C语言竞赛题之1049抓牌排序
题目 解决代码及点评 /* 功能:插入排序.许多玩牌的人是以这样的方式来对他们手中的牌进行排序的: 设手中原有3张牌已排好序,抓1张新牌,若这张新牌的次序在原来的第2张牌之后,第 3 ...
- JQuery5.04获取
获取body: $('body'); 或者 $(document.body); 获取元素标签:$('div'); $('a'); 获取ID: $('id'); 获取某个元素的某个属性: $('a ...
- CF 224 B Array
给你n个数,求[l, r] 的一段数,a[l] - a[r] 一共含有k个不相同的数,且sum a[l, r] 最小的那一段. 用队列维护当前数段中不同元素的个数即可. #include<ios ...