这里指的文本是用于Windows系统中的扩展名为.txt的文件。
Notepad(记事本)只支持四种格式:ANSI/Unicode/Unicode big endian/UFT-8,在Delphi中如何判断与读取这些不同格式的文本呢?
首先,不同编码的文本,是根据文本的前两个字节来定义其编码格式的。定义如下:
ANSI: 无格式定义;
Unicode: 前两个字节为FFFE;
Unicode big endian: 前两字节为FEFF;
UTF-8: 前两字节为EFBB;
知道了各种编码格式的区别,写代码就容易了,以下是我在一个软件中写的处理代码:
(注意,Delphi的TMemo/TRichEdit只支持ANSI的文本文件,其它编码格式的文件需要
自行写代码转换成GB2312或BIG5,方能正确显示)
type
TTextFormat=(tfAnsi,tfUnicode,tfUnicodeBigEndian,tfUtf8);
const
TextFormatFlag:array[tfAnsi..tfUtf8] of word=($0000,$FFFE,$FEFF,$EFBB);
function WordLoHiExchange(w:Word):Word;register;
asm
XCHG AL, AH
end;
{ TextFormat返回文本编码类型,sText未经处理的文本 }
procedure ReadTextFile(const FileName: string;
var TextFormat: TTextFormat; var sText:string);
var
w:Word;
b:Byte;
begin
with TFileStream.Create(FileName,fmOpenRead or fmShareDenyNone) do
try
Read(w,2);
w:=WordLoHiExchange(w);//因为是以Word数据类型读取,故高低字节互换
if w = TextFormatFlag[tfUnicode] then
TextFormat:= tfUnicode
else if w = TextFormatFlag[tfUnicodeBigEndian] then
TextFormat:= tfUnicodeBigEndian
else if w = TextFormatFlag[tfUtf8] then
begin
Read(b,1);//这里要注意一下,UFT-8必须要跳过三个字节。
TextFormat:=tfUtf8;
end else
begin
TextFormat:=tfANSI;
Position:=0;
end;
SetLength(sText,Size-Position);
ReadBuffer(sText[1],Size-Position);
finally
Free;
end;
end;
{
}
相关推荐
HTML金色流星雨(完整代码)
HTML实现金色流星雨动态效果的完整代码。
win10如何查看文本文件的编码
有的文件不是纯文本的,比如它混入了二进制值,这时,用记事本打开大概率是乱码,记事本也显示不出正确的编码。用file命令结果显示的是data,不清楚是什么编码。如上图, 当前编码是UTF-8 Unicode。如上图,当前编码是UTF-8。如上图,当前编码是UTF-8。
dsPIC33系列中文参考手册
dsPIC33 系列单片机 中文文档。喜欢就下载 dsPIC33 系列单片机 中文文档。dsPIC33 中文参考手册
C++ UTF-8编码识别(分析文件内容,非文件头)
<br />C++ UTF-8编码识别<br /><br />转载请注明原创作者刘志远<br />http://blog.csdn.net/liuzhiyuan1982<br /><br />UTF-8编码的文本文档,有的带有BOM (Byte Order Mark, 字节序标志),即0xEF, 0xBB, 0xBF,有的没有。Windows下的文本编辑器在保存UTF-8格式的文本文档时会自动添加BOM到文件头。在判断这类文档时,可以根据文档的前3个字节来进行判断。然而BOM不是必需的,而且也不是推荐的。对
java学习日记day03---变量就是一段内存空间
定义一个变量,就是向内存申请一段空间 对于基本数据类型 byte 1字节 short 2字节 int 4字节 long 8字节 float 4字节 double 8字节 boolean 1字节 char 2字节(c语言占1字节) 对于引用数据类型 People p; 也是向内存申请一块空间,栈内存中存指针地址,堆内存中存储值 ...
C#中判断文本文件编码格式的静态类
1、定义一个判断文本文件编码格式的静态类--TextEncodingType: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace Demo_Menu { ...
java判断文本文件编码格式juniversalchardet使用
java判断文本文件编码格式juniversalchardet使用 今天项目经理让写一个判断隔断文本文件格式的接口,废话不多说直接上代码。 juniversalchardet官网地址: http:code.google.com/p/juniversalchardet/ github地址 https://github.com/thkoch2001/juniversalchardet 支持的编码格式 ...
Delphi判断文本文件的编码格式
今天在网上看到一位老兄写的判断记事本保存的文本的四种格式的判断,觉得非常不错。Notepad(记事本)只支持四种格式:ANSI/Unicode/Unicode big endian/UFT-8,在Delphi中如何判断与读取这些不同格式的文本呢?首先,不同编码的文本,是根据文本的前两个字节来定义其编码格式的。定义如下:ANSI: 无格式定义;Unicode:
如何用VFP判断文本文件的编码格式?
*--文本文件的编码格式手动查看方法:*--用记事本打开文本后,点击菜单上的“另存为”,编码格式在出现的对话框下方。*--那用VFP如何取得文本文件的编码格式呢,如下:lcFileName=C:/A.txt &&文本文件名lcStr=Filetostr(lcFileName)lcStrType=Createbinary(Substr(lcStr,1,2))Do Case Case
Delphi 判断文本文件的编码格式并读取内容
这里指的文本是用于Windows系统中的扩展名为.txt的文件。 Notepad(记事本)只支持四种格式:ANSI/Unicode/Unicode big endian/UFT-8,在Delphi中如何判断与读取这些不同格式的文本呢? 首先,不同编码的文本,是根据文本的前两个字节来定义其编码格式的。定义如下: ANSI: 无格式定义; Unicode: 前两个字节为FFFE; Unicode bi...
Delphi 判断文本文件的编码格式
不同编码的文本,是根据文本的前两个字节来定义其编码格式的。定义如下: ANSI: 无格式定义; Unicode: 前两个字节为FFFE; Unicode big endian: 前两字节为FEFF; UTF-8: 前两字节为EFBB; type TTextFormat=(tfAnsi,tfUnicode,tfUnicodeBigEndian,tfUtf8); const
java判断文本文件编码格式
上篇文章需要读取当前java或者配置文件的编码格式,这里主要支持UTF-8、GBK、UTF-16、Unicode等 /** * 判断文件的编码格式 * @param fileName :file * @return 文件编码格式 * @throws Exception */ public static String codeString(File fileName) thro...
Qt自动判断文本文件的编码格式(QT自定义文件编辑器)
迅哥说:每个程序员都会遇到乱码问题,只是早晚的事情。(鲁迅:我没说过) 问题形容:比如在qt自定义一个文件编辑器,类似于window的记事本,会发现打开不同编码格式的文本文件会乱码。。 解决方案:window系统的 txt 文件编码一般有 ANSI 或者 UTF8 格式,其中 ANSI 也就是qt里的 GBK格式。因此,只要我们在打开文本文件时先判断该文件的编码格式,然后qt设置好该编码格式后读取文件即可。 1、第一次打开文件 2、判断其编码格式 3、关闭文件 4、再次打开文件 5、根据第二步的返回值设置
vba判断文件编码格式_如何用vba判断一个记事本文本文件是什么编码?
在了解如何用vba判断一个文本文件是以什么编码形式保存之前,我们先来了解下字节序的概念。比如一个中文字符“保”的unicode编码为4FDD,在存入到计算机时,需要用2个字节,如果第一个字节存4F,第二个字节存DD,那么它的字节序就是Big Endian。如果第一个字节存DD,第二个字节存4F,那么它的字节序就是 Little Endian。由于一个文本文件可以保存为ANSI编码、Unicode ...
C# 判断一个文本文件的编码格式(转载)
文件的字符集在Windows下有两种,一种是ANSI,一种Unicode。对于Unicode,Windows支持了它的三种编码方式,一种是小尾编码(Unicode),一种是大尾编码(BigEndianUnicode),一种是UTF-8编码。我们可以从文件的头部来区分一个文件是属于哪种编码。当头部开始的两个字节为 FF FE时,是Unicode的小尾编码;当头部的两个字节为FE FF时,是...
判断一个文本文件的编码格式
文件的字符集在Windows下有两种,一种是ANSI,一种Unicode。 对于Unicode,Windows支持了它的三种编码方式,一种是小尾编码(Unicode),一种是大尾编码(BigEndianUnicode),一种是UTF-8编码。 我们可以从文件的头部来区分一个文件是属于哪种编码。当头部开始的两个字节为 FF FE时,是Unicode的小尾编码;当头部的两个字节为FE FF
金融科技发展水平原始数据.dta
金融科技发展水平原始数据.dta
929




被折叠的 条评论
为什么被折叠?



