В Delphi 2009 и более поздних версиях String
является псевдонимом для UnicodeString
. Тем не менее, WideCharToString()
долго предшествует UnicodeString
, начиная еще с Delphi 5 (возможно, даже раньше), когда вместо String
был псевдоним для AnsiString
.
Почему функция когда-либо существоваланужно, я не знаю. 1 По крайней мере, начиная с Delphi 5, PWideChar
может быть назначен непосредственно для AnsiString
, преобразуя 16-битные данные UCS-2 / UTF-16 в 8-битные данные ANSI (через RTL _LStrFromPWChar()
функция в блоке System
).
1: я подозреваю , но не могу подтвердить, что, возможно, когда-нибудь между Delphi 1-4, напрямую назначив *От 1020 * до String
пока не поддерживается, требующая явной функции. AnsiString
был введен в Delphi 2, поэтому, если в Delphi 1 существовало WideCharToString()
, то, вероятно, это помогло бы преобразовать 16-битные данные Unicode в String
, когда они все еще были псевдонимом для ShortString
.
Когда в Delphi 2009 была введена UnicodeString
, старые функции RTL на основе ANSI были обновлены (но не переименованы) для поддержки Unicode, включая WideCharToString()
, что теперь позволяет просто копировать 16-битные данные как есть. чем преобразовать это. И поскольку PWideChar
также может быть назначен непосредственно для UnicodeString
(через функцию RTL System._UStrFromPWChar()
), WideCharToString()
теперь полностью избыточен 2 .
2: если Embarcadero / Idera не решат снова изменить тип String
в будущем, скажем, UTF8String
.