本文整理自网络,侵删。
//delphi获取文件编码
unit EncodeUnit;
interface
uses
SysUtils, Windows, Classes;
type
TTextFormat = ( tfAnsi, tfUnicode, tfUnicodeBigEndian, tfUtf8 );
const
TextFormatFlag: array [tfAnsi..tfUtf8] of Word = ( $0000,$FFFE,$FEFF,$EFBB );
function GetFileEncodeing(const FileName: string): TTextFormat;
function WideStringToString(const WS: WideString; CodePage: Word): string;
implementation
//高低字节互换
function WordLoHiExchange(w: Word): Word; register;
asm
XCHG AL, AH
end;
//取得文件编码
function GetFileEncodeing(const FileName: string): TTextFormat;
var
W: Word;
begin
try
with TFileStream.Create(FileName,fmOpenRead or fmShareDenyNone) do
begin
Seek(0, soFromBeginning);
Read(W,2);
W := WordLoHiExchange(W); //因为是以Word数据类型读取,故高低字节互换
if W=TextFormatFlag[tfUnicode] then
Result := tfUnicode
else if W=TextFormatFlag[tfUnicodeBigEndian] then
Result := tfUnicodeBigEndian
else if W=TextFormatFlag[tfUtf8] then
Result := tfUtf8
else
Result := tfAnsi;
Free;
end;
except
Result := tfAnsi;
end;
end;
//Unicode 转 ANSI
function WideStringToString(const WS: WideString; CodePage: Word): string;
var
InputLength, OutputLength: Integer;
begin
InputLength := Length(WS);
OutputLength := WideCharToMultiByte(CodePage, 0, PWideChar(WS), InputLength, nil, 0, nil, nil);
SetLength(Result, OutputLength);
WideCharToMultiByte(CodePage, 0, PWideChar(WS), InputLength, PAnsiChar(Result), OutputLength, nil, nil);
end;
end.
相关阅读 >>
Delphi研究之驱动开发篇(七)--利用共享内存与用户模式
Delphi cxdbtreelist:最简单的节点图标添加方法
Delphi2010 图片格式转换bmp, png,jpeg, gif, tiff , wmphoto
Delphi 跨平台的,在fmx中读取icon文件的每一帧到bitmap
更多相关阅读请进入《Delphi》频道 >>