Вот такой код когда-то писал
var
Stream: TBytesStream;
Size: Integer;
Buffer: TBytes;
Encoding: TEncoding;
begin
if OpenDialog1.Execute then
begin
Stream := TBytesStream.Create;
try
Stream.LoadFromFile(OpenDialog1.FileName);
Buffer := Stream.Bytes;
Size := TEncoding.GetBufferEncoding(Buffer, Encoding, TEncoding.Default);
finally
Freeandnil(Stream);
end;
if not TEncoding.IsStandardEncoding(Encoding) then
Encoding := TEncoding.GetEncoding(Encoding.CodePage);
ShowMessage(Encoding.EncodingName);
end;
проблема в том что в недрах этой строчки
Size := TEncoding.GetBufferEncoding(Buffer, Encoding, TEncoding.Default);
всегда ворачивается Кодировка по умолчанию (Windows - ANSI, Остальные - UTF-8), если кодировка отличается от стандартных (ANSI, ASCII, UTF7, UTF8, Unicode, BigEndianUnicode)
И этот код никогда не выполнится
if not TEncoding.IsStandardEncoding(Encoding) then
Encoding := TEncoding.GetEncoding(Encoding.CodePage);
Вариант остается такой, собрать преамбулы всех кодировок и самому проверить их соответсвие