|
 |
栏目导栏 |
|
| |
|
|
|
|
 |
资料搜索 |
|
| |
|
|
|
|
 |
热门文章 |
|
| |
|
|
|
|
 |
最新文章 |
|
| |
|
|
|
| |
| |
|
|
|
|
这里指的文本是用于Windows系统中的扩展名为.txt的文件。rdrLinux联盟 rdrLinux联盟 Notepad(记事本)只支持四种格式:ANSI/Unicode/Unicode big endian/UFT-8,在Delphi中如何判断与读取这些不同格式的文本呢?rdrLinux联盟 rdrLinux联盟 首先,不同编码的文本,是根据文本的前两个字节来定义其编码格式的。定义如下:rdrLinux联盟 rdrLinux联盟 ANSI: 无格式定义;rdrLinux联盟 Unicode: 前两个字节为FFFE;rdrLinux联盟 Unicode big endian: 前两字节为FEFF; rdrLinux联盟 UTF-8: 前两字节为EFBB; rdrLinux联盟 rdrLinux联盟 知道了各种编码格式的区别,写代码就容易了,以下是我在一个软件中写的处理代码:rdrLinux联盟 (注意,Delphi的TMemo/TRichEdit只支持ANSI的文本文件,其它编码格式的文件需要自行写代码转换成GB2312或BIG5,方能正确显示)rdrLinux联盟 rdrLinux联盟
rdrLinux联盟 typerdrLinux联盟 TTextFormat=(tfAnsi,tfUnicode,tfUnicodeBigEndian,tfUtf8);rdrLinux联盟 constrdrLinux联盟 TextFormatFlag:array[tfAnsi..tfUtf8] of word=($0000,$FFFE,$FEFF,$EFBB); rdrLinux联盟 rdrLinux联盟 procedure WordLoHiExchange(var w:Word);rdrLinux联盟 varrdrLinux联盟 b:Byte;rdrLinux联盟 beginrdrLinux联盟 b:=WordRec(w).Lo;rdrLinux联盟 WordRec(w).Lo:=WordRec(w).Hi;rdrLinux联盟 WordRec(w).Hi:=b;rdrLinux联盟 end;rdrLinux联盟 rdrLinux联盟 { TextFormat返回文本编码类型,sText未经处理的文本 }rdrLinux联盟 function ReadTextFile(const FileName: string;rdrLinux联盟 var TextFormat: TTextFormat; var sText:string);rdrLinux联盟 varrdrLinux联盟 w:Word;rdrLinux联盟 b:Byte;rdrLinux联盟 beginrdrLinux联盟 with TFileStream.Create(FileName,fmOpenRead or fmShareDenyNone) dordrLinux联盟 tryrdrLinux联盟 Read(w,2);rdrLinux联盟 WordLoHiExchange(w);//因为是以Word数据类型读取,故高低字节互换rdrLinux联盟 if w = TextFormatFlag[tfUnicode] thenrdrLinux联盟 TextFormat:= tfUnicoderdrLinux联盟 else if w = TextFormatFlag[tfUnicodeBigEndian] thenrdrLinux联盟 TextFormat:= tfUnicodeBigEndianrdrLinux联盟 else if w = TextFormatFlag[tfUtf8] thenrdrLinux联盟 beginrdrLinux联盟 Read(b,1);//这里要注意一下,UFT-8必须要跳过三个字节。rdrLinux联盟 TextFormat:=tfUtf8;rdrLinux联盟 end elserdrLinux联盟 beginrdrLinux联盟 TextFormat:=tfANSI;rdrLinux联盟 Position:=0;rdrLinux联盟 end;rdrLinux联盟 SetLength(sText,Size-Position);rdrLinux联盟 ReadBuffer(sText[1],Size-Position);rdrLinux联盟 finallyrdrLinux联盟 Free;rdrLinux联盟 end;rdrLinux联盟 end;rdrLinux联盟
|
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论 |
|
|
|
|
|