Если вы используете версию Delphi до 2009 года, она не поддерживает Unicode, а спецификация бессмысленна для TStringList.
Если вы используете D2009 или выше (которые поддерживают Unicode),вы можете использовать перегруженный TStringList.LoadFromStream(Stream: TStream; Encoding: TEncoding)
, если заранее знаете, что такое кодировка;если вы этого не сделаете, RTL попытается выяснить это, используя TEncoding.GetBufferEncoding
.Вы можете ознакомиться с документацией по Delphi XE по теме здесь
Если вы не знаете заранее, а RTL не может выяснить это по содержанию, вы можетевсегда читайте спецификацию самостоятельно из потока, а затем установите Stream.Position
сразу после спецификации и загрузите TStringList
из этой позиции с декодированием, которое вы определяете сами из этой спецификации.
Кроме того, создание TFileStream
для простой загрузки в TStringList
является пустой тратой;TStringList.LoadFromFile
будет обрабатывать сам файл, и это намного меньше кода, если это все, что вы собираетесь делать с TStream
.
РЕДАКТИРОВАТЬ: После вашего комментария я подумал, что я бы включил списокиз спецификаций, с которыми я знаком - может быть больше, о чем я не знаю:
$00 $00 $FE $FF UTF-32, big-endian (bytes must be swapped for Windows)
$FE $FF $00 $00 UTF-32, little-endian
$FF $FE UTF-16 2 byte chars little-endian
$FE $FF UTF-16 2 byte big-endian
$EF $BB $BF Unicode UTF-8 (must be decoded before using Unicode data)
(Для дальнейшего использования: в тегах или тексте вашего вопроса вы должны указать, какая версияDelphi, который вы используете, поскольку между ними есть различия в VCL и RTL. Когда речь идет о таких вещах, как вопросы типа Unicode / BOM, эти различия чрезвычайно важны.)