Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Преобразовать файл из OEM в ANSI

Delphi , Синтаксис , Преобразования

Преобразовать файл из OEM в ANSI

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

procedure ConvertFile(const FileName: string; fromCodepage: Integer);
 var
   ms: TMemoryStream;
 begin
   if getOEMCP <> fromCodepage then
     raise Exception.Create('ConvertFile: Codepage doesn''t match!');
   ms := TMemoryStream.Create;
   try
     ms.LoadFromFile(FileName);
     // make backup 
    ms.Position := 0;
     ms.SaveToFile(ChangeFileExt(FileName, '.BAK'));
     // convert text 
    OEMToCharBuff(ms.Memory, ms.Memory, ms.Size);
     // save back to original file 
    ms.Position := 0;
     ms.SaveToFile(FileName);
   finally
     ms.Free;
   end;
 end;

Перевод контента на русский язык:

Процедура Delphi, называемая ConvertFile, конвертирует файл из кодовой страницы OEM в кодовую страницу ANSI. Процедура принимает два параметра: FileName, имя файла для конвертации, и fromCodepage, номер кодовой страницы OEM.

Содержание процедуры:

  1. Она проверяет, совпадает ли текущая кодовая страница OEM с указанной fromCodepage. Если они не совпадают, она выбрасывает исключение.
  2. Она создает объект TMemoryStream для чтения и записи содержимого файла.
  3. Она загружает содержимое оригинального файла в память с помощью ms.LoadFromFile.
  4. Она делает резервную копию оригинального файла, сохраняя его содержимое в новый файл с тем же именем, но с расширением .BAK с помощью ChangeFileExt.
  5. Она конвертирует текст OEM в памяти в ANSI-символы с помощью функции OEMToCharBuff (которая не определена в этом коде).
  6. Она сохраняет конвертированный текст обратно в оригинальный файл с помощью ms.SaveToFile.

Процедура использует блок try-finally для обеспечения освобождения памяти, независимо от возникновения исключения.

Предложенная альтернативная решение:

Вместо использования custom-функции OEMToCharBuff, можно использовать встроенный класс TEncoding Delphi для конвертации между различными кодировками. Можно использовать метод TEncoding.GetCodePage для получения номера кодовой страницы OEM и затем метод TEncoding.Convert для конвертации текста из OEM в ANSI.

Обновленная версия процедуры:

procedure ConvertFile(const FileName: string; fromCodepage: Integer);
var
  ms: TMemoryStream;
  encoding: TEncoding;
begin
  if GetOEMCP <> fromCodepage then
    raise Exception.Create('ConvertFile: Codepage doesn''t match!');

  ms := TMemoryStream.Create;
  try
    ms.LoadFromFile(FileName);

    encoding := TEncoding.GetEncoding(GetOEMCP);
    ms.Position := 0;
    SetLength(text, ms.Size);
    Move(ms.Memory^, text[1], ms.Size);
    text := encoding.Convert(text, nil, 'ANSI');
    ms.Position := 0;

    ms.SaveToFile(FileName);
  finally
    ms.Free;
  end;
end;

Замечание: это код assumes that the OEM code page number is stored in a variable GetOEMCP, which you need to define and initialize accordingly. Also, the text variable is used to store the converted text, and it needs to be initialized with an empty string before calling encoding.Convert.

Преобразует файл из кодировки OEM в ANSI с помощью процедуры ConvertFile, которая проверяет соответствие кодировок, создает резервную копию файла, конвертирует текст и сохраняет результат обратно в исходный файл.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Преобразования ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 01:04:14/0.0033309459686279/0