正常文本文件应该只包含 0x09(TAB),0x0A, 0x0D, 0x20 到 0x7E,
并且 0x0A 和 0x0D 已 0x0D0A 形式成对出现(Unix下只用0x0A,并已0x0A结束)
GB2312 字符集中加入了 0xA0 - 0xFE, 成对出现显示简体中文
BIG5的我就不清楚了
UnionCode的文本文件就更不好说了....
现在又出现了 18030 超大字符集,又4字节汉字,你说这是不是文本文件?
最简单的办法就是从头到尾读一下,只要不包含 0x00 - 0x08, 0x0B, 0x0C,
0x0E - 0x1F, 0x7F, 0xFF 这些字符,那就是文本文件。
function isTextFile(FN: string):boolean;
var
F: TStream;
begin
Result:=True;
F:=TMemoryStream.Create;
F.LoadFromFile(FN);
for i:=0 to F.Size-1 do
if (PChar(F.Memory)+i)^ in [#$0..#$8, #$B, #$C, #$E..#$1F, #$7F, #$FF ] then begin
Result := False;
Break;
end;
F.Free;
end;