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

Как загрузить юникоды в мемо?

Delphi , Компоненты и Классы , TMemo и TRichEdit

Code:

procedure LoadUnicodeFile(const filename: string; strings: TStrings);
 
procedure SwapWideChars(p: PWideChar);
begin
   while p^ <> #0000 do
   begin
     p^ := WideChar(Swap(Word(p^)));
     Inc(p);
   end;
end;
 
var
ms: TMemoryStream;
wc: WideChar;
pWc: PWideChar;
begin
ms := TMemoryStream.Create;
try
   ms.LoadFromFile(filename);
   ms.Seek(0, soFromend);
   wc := #0000;
   ms.Write(wc, sizeof(wc));
   pWC := ms.Memory;
   if pWc^ = #$FEFF then {normal byte order mark}
     Inc(pWc)
   else if pWc^ = #$FFFE then
   begin {byte order is big-endian}
     SwapWideChars(pWc);
     Inc(pWc);
   end
   else
     ; {no byte order mark}
   strings.Text := WideChartoString(pWc);
finally
   ms.free;
end;
end;

Использовать

LoadUnicodeFile(filename, memo1.lines); Взято с Delphi Knowledge Base: http://www.baltsoft.com/

Код, который вы предоставили, предназначен для загрузки файлов с кодировкой Юникод в объект TStrings, который может быть использован для заполнения компонента TMemo в приложении Delphi.

Вот шаг за шагом, что делает этот код:

  1. Процедура LoadUnicodeFile принимает два параметра: filename, которое является путем к файлу, который нужно загрузить, и strings, которое является объектом TStrings, который будет содержать содержимое файла.
  2. Процедура создает объект TMemoryStream (ms) и загружает файл в него с помощью метода LoadFromFile.
  3. Затем она перемещается к концу потока с помощью метода Seek с параметром soFromEnd, эффективно позиционируя поток на начало файла.
  4. Процедура записывает одиночный Юникод- символ (#0000) в поток, который используется как маркер для обнаружения знака начала файла (BOM) в файле.
  5. Затем она перемещается назад к началу файла с помощью метода Seek с параметром soFromBeginning и получает указатель на буфер памяти (pWC) с помощью свойства Memory.
  6. Код проверяет, есть ли BOM в начале файла, сравнивая его с либо #$FEFF (UTF-16 little-endian) или #$FFFE (UTF-16 big-endian). Если он находит BOM, он меняет порядок байтов с помощью процедуры SwapWideChars.
  7. Наконец, код конвертирует буфер памяти в строку с помощью функции WideChartoString и присваивает ее свойству Text объекта TStrings.

Чтобы использовать этот код, просто вызовите процедуру LoadUnicodeFile с желаемым путем к файлу и свойством Lines компонента TMemo в качестве аргументов:

LoadUnicodeFile('path/to/file.txt', memo1.Lines);

Это загрузит содержимое файла в компонент memo1.

Обратите внимание, что этот код предполагает, что файлы содержат текст Юникод, закодированный в UTF-16 с BOM. Если ваши файлы используют другую кодировку, вам может потребоваться изменить код соответствующим образом.

Данное описание статьи в русском языке: Загрузка юникодов в мемо-объект при помощи процедуры LoadUnicodeFile, позволяющей безопасно и эффективно конвертировать файлы с юникодными символами в строковые переменные.


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

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




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


:: Главная :: TMemo и TRichEdit ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 12:44:55/0.0047900676727295/1