В D2009 +, TStringStream
ожидает UnicodeString
, а не AnsiString
. Если вы просто хотите, чтобы написать содержание AnsiString
как есть без необходимости конвертировать данные в Unicode, а затем обратно в Анси, используйте TMemoryStream
вместо:
function AnsiStringToStream(const AString: AnsiString): TStream;
begin
Result := TMemoryStream.Create;
Result.Write(PAnsiChar(AString)^, Length(AString));
Result.Position := 0;
end;
Поскольку AnsiString
является кодовым-известен в D2009 +, любую строку который передается вашей функции, будет принудительно применен к кодировке Ansi по умолчанию ОС. Если вы хотите, чтобы иметь возможность передавать любой 8-битный тип строки, такие как UTF8String
, без преобразования данных вообще, используйте RawByteString
вместо AnsiString
:
function AnsiStringToStream(const AString: RawByteString): TStream;
begin
Result := TMemoryStream.Create;
Result.Write(PAnsiChar(AString)^, Length(AString));
Result.Position := 0;
end;
Другого варианта, чтобы отключить это предупреждение. –
@DavidHeffernan: да, но желательно только локально, чтобы не потерять помощь компилятора в другом месте ... –
@Marjan Почему? Я не понял, что для меня делает это предупреждение. Я выключаю его глобально. –