procedure ConvertFile(const FileName: string; fromCodepage: Integer);
var
ms: TMemoryStream;
beginif getOEMCP <> fromCodepage thenraise 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.
Содержание процедуры:
Она проверяет, совпадает ли текущая кодовая страница OEM с указанной fromCodepage. Если они не совпадают, она выбрасывает исключение.
Она создает объект TMemoryStream для чтения и записи содержимого файла.
Она загружает содержимое оригинального файла в память с помощью ms.LoadFromFile.
Она делает резервную копию оригинального файла, сохраняя его содержимое в новый файл с тем же именем, но с расширением .BAK с помощью ChangeFileExt.
Она конвертирует текст OEM в памяти в ANSI-символы с помощью функции OEMToCharBuff (которая не определена в этом коде).
Она сохраняет конвертированный текст обратно в оригинальный файл с помощью ms.SaveToFile.
Процедура использует блок try-finally для обеспечения освобождения памяти, независимо от возникновения исключения.
Предложенная альтернативная решение:
Вместо использования custom-функции OEMToCharBuff, можно использовать встроенный класс TEncoding Delphi для конвертации между различными кодировками. Можно использовать метод TEncoding.GetCodePage для получения номера кодовой страницы OEM и затем метод TEncoding.Convert для конвертации текста из OEM в ANSI.
Замечание: это код 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
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.