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

Материал из DRKB

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

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);


Source: Взято с Delphi Knowledge Base: http://www.baltsoft.com/
ID: 00555