Безопасно ли смешивать TIBStringField/TWideStringField и AsString/AsIBString/AsWideString, начиная с Delphi 2009 (первое издание Unicode)?
У меня возникла странная ситуация с заданием в версии Delphi 10.2 Tokyo:
//AccountsCDS: TClientDataSet;
//AccountsCDSACCOUNT_ID: TIBStringField;
//AAccountId: string;
//AAccountId is '5720' and I expect that AccountsCDSACCOUNT_ID.AsString will be '5720' too,
//but it is #8'5720' instead - 5 characters long!
AccountsCDSACCOUNT_ID.AsString:=AAccountId;
Раньше я много работал с Delphi 2009, и, по моему опыту, я могу безопасно смешивать TIBStringField/TWideStringField и AsString/AsIBString/AsWideString. Мне следует избегать использования полей TStringField для TClientDataSet (вместо них следует использовать поля TWideStringField), но было действительно безопасно использовать TIBStringField, поскольку они унаследованы от TWideStringField. То же самое было с функциями доступа As..., потому что политика Delphi заключалась в том, чтобы воспринимать String и WideString как взаимозаменяемые и разделять более старые AnsiString как строки, отличные от Unicode.
Являются ли мои предположения о смешении TIBStringField/TWideStringField и AsString/AsIBString/AsWideString неверными для последних (10.x и 11.x, Tokyo, Sidney и т. д.) выпусков Delphi?
Почему в моем примере кода к присваиванию добавляется странный ведущий символ?
Дополнение: я изменил объявления полей с TIBStringField на TWideStringField (механическое изменение имени типа), и это решило ситуацию: я могу использовать средства доступа AsString... и не добавляются дополнительные ведущие символы. Это действительно странно, потому что, как я уже сказал, TIBStringField наследуется от TWideStringField.