Так как мне не удалось найти компьютер с установленной англоязычной Windows, скачал вместо этого (чтобы не устанавливать) Windows PE (Hiren's BootCD 15.2) и как оказалась эта бага действительно имеет место быть - если не указать явно, то программа всегда считает, что файлы содержащие "простой" ansi-текст имеют кодировку соответствующие локализации Windows.
Чтобы нормально загружался ansi-текст как русскоязычный не зависимо от локализации Windows нужно указывать явно кодировку 1251:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
cp1251: TMBCSEncoding;
begin
cp1251 := TMBCSEncoding.Create(1251);
try
Memo1.Lines.DefaultEncoding := cp1251;
Memo1.Lines.LoadFromFile('1.txt');
finally
cp1251.Free;
end;
end;
Естественно объект cp1251 можно создать один раз, а использовать много раз. Фактически достаточно всего один раз присвоить в DefaultEncoding в каждый Memo (и т.п.), после чего можно объект cp1251 вообще уничтожить.
Теперь о том почему я считаю эту фичу багом.
Во-первых непонятно с чего это вдруг язык ansi-текстов зависит от локализации Windows, а не например от настроек "Язык и региональные стандарты". Я например лет 5 сидел под англоязычной Windows 2000 создавая при этом нормальные русскоязычные текстовые файлы в ansi кодировке.
Во-вторых по непонятной причине нет никакой возможности задать (в настройках или однократным вызовом процедуры) кодовую страницу по-умолчанию для ansi-текста. Всякий раз если не указать явно, будет вызываться API-функция
GetACP которая возвращает язык локализации Windows. Вызов SetMultiByteConversionCodePage(1251) устанавливает кодовую страницу по-умолчанию похоже только для RawByteString.