程序原理通過通過判斷文件頭幾個字節來判斷文件的編碼格式
ANSI : 無格式定義;
Unicode : 前兩個字節為 FFFE ;
Unicode big endian : 前兩字節為 FEFF ;
UTF-8 : 前兩字節為 EFBB ;
代碼部分來自網絡+自己修改
定義:
type
TTextFormat = (tfAnsi, tfUnicode, tfUnicodeBigEndian, tfUtf8);
end;
const
TextFormatFlag: array [tfAnsi .. tfUtf8] of word = ($0000, $FFFE, $FEFF,
$EFBB);
函數
function GetFileType(const FileName: string): TTextFormat;
var
w: word;
b: Byte;
begin
with TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone) do
try
Read(w, 2);
asm // 因為是以Word數據類型讀取,故高低字節互換
PUSH EAX
MOVZX EAX, w
XCHG AL,AH
MOV w, AX
POP EAX
end;
if w = TextFormatFlag[tfUnicode] then
Result := TTextFormat.tfUnicode
else if w = TextFormatFlag[tfUnicodeBigEndian] then
Result := TTextFormat.tfUnicodeBigEndian
else if w = TextFormatFlag[tfUtf8] then
Result := TTextFormat.tfUtf8
else
Result := TTextFormat.tfAnsi;
finally
Free;
end;
end;