Столкнулся недавно с необходимостью сохранить текст в DOS кодировке (CP866).
В delphi7 для сохранения функцией Writeln использовалось преобразование вида:
CharToOem(PChar(S), PChar(Buf));
В delphiXE2 функция перестала сохранять файл в новом виде.
Решение оказалось простым, в функции AssignFile можно указать кодовую страницу.
Таким образом, для сохранения строки в текстовый файл с кодовой страницей 866 (DOS) можно воспользоваться следующей функцией:
procedure WritelnOEM( FileName: string; const S: String); var Buf: string; F: TextFile; begin AssignFile(F, FileName, 866); ReWrite(F); SetLength(Buf, Length(S)); try Buf := s; // OemToChar(PChar(S), PChar(Buf)); старая реализация finally Writeln(F, Buf); CloseFile(F); end; end;
Кроме того, в ряде случаев, удобно воспользоваться классом System.SysUtils.TEncoding, например для сохранения TMemo или TStrings.
procedure TForm1.Button1Click(Sender: TObject); var myEncoding : TEncoding; begin myEncoding := TEncoding.GetEncoding(866); Memo1.Lines.SaveToFile('с:\file.txt',myEncoding); end;
или загрузки
procedure TForm1.Button2Click(Sender: TObject); var myEncoding : TEncoding; begin myEncoding := TEncoding.GetEncoding(866); Memo2.Lines.LoadFromFile('с:\file.txt',myEncoding); end;
Комментарии закрыты.