linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘网络学院网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > Delphi >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·HexToStr函数和StrToHex函数
·Delphi中的进制转换
·delphi轻松设置无边框透明窗体
·delphi第三方控件安装(Ehlib)
·DELPHI组件安装全攻略
·delphi动态创建控件
·开发工具比较Visual C++ VS De
·delphi完整身份证效验程序实例
·delphi中的Format函数详解
·delphi编程获取打印机的打印任
·如何判断文本文件的编码格式
·深入研究Variant数组
·用delphi编写网络游戏的外挂
·Delphi技巧-用户自定义数据类型
·delphi设置控件透明
最新文章
·在应用程序中跟踪MOUSE的坐标
·压缩和修复MS Access 2000文件
·DELPHI 6.0 动画制做
·怎样在Delphi中调用LastError信
·怎样得到主域服务器名称
·怎样利用递归实现删除某一目录
·读出主键下所有项
·如何制作照片底片效果的图像(
·获得Modem的状态
·WebBrowser屏幕滚动的实现,设
·有关字符串处理的小技巧
·Delphi建立键盘鼠标动作纪录与
·Delphi中布尔类型辨析
·DELPHI程序注册码设计
·图形的不规则的Copy
Google
 
如何判断文本文件的编码格式
[ 作者:  加入时间:2007-11-02 13:13:23  来自:Linux联盟收集整理 ]
这里指的文本是用于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论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
无相关信息