Delphi в мире Юникода


         

Методы Read/ReadBuffer для TStream


Вызов TStream.Read/ReadBuffer также следует рассмотреть, если используются строки или символьные массивы. Рассмотрим следующий код:  var    S: string;    L: Integer;    Stream: TStream;    Temp: AnsiString;  begin    // Существующий код - неправильный, потому что string = UnicodeString    Stream.Read(L, SizeOf(Integer));    SetLength(S, L);    Stream.Read(Pointer(S)^, L);       // Правильный код для Юникод-данных    Stream.Read(L, SizeOf(Integer));    SetLength(S, L);    Stream.Read(Pointer(S)^, L * SizeOf(Char));  // <<-- Задание размера буфера в байтах       // Правильный код для ANSI-данных    Stream.Read(L, SizeOf(Integer));    SetLength(Temp, L);              // <<-- Используем временную AnsiString    Stream.Read(Pointer(Temp)^, L * SizeOf(AnsiChar));  // <<-- Задание размера буфера в байтах    S := Temp;                       // <<-- Расширим строку до Юникода  end;

Примечание: работа зависит от формата читаемых данных. Смотрите описание нового класса TEncoding, приведенное выше, для получения сведений о правильном кодировании текста в Stream"е.



Содержание раздела