String 将PWideChar转换为字符串。我应该使用WideCharting吗?
我正在使用delphixe3 在以下代码中:String 将PWideChar转换为字符串。我应该使用WideCharting吗?,string,delphi,widechar,String,Delphi,Widechar,我正在使用delphixe3 在以下代码中: procedure TForm1.Button1Click(Sender: TObject); var A: PWideChar; B: string; C: string; begin A := '123'; B := A; C := WideCharToString(A); end; 似乎直接赋值和WideCharToString都可以将PWideChar转换为字符串。在这种情况下,为什么会有人使用WideCharTo
procedure TForm1.Button1Click(Sender: TObject);
var
A: PWideChar;
B: string;
C: string;
begin
A := '123';
B := A;
C := WideCharToString(A);
end;
似乎直接赋值和WideCharToString都可以将PWideChar转换为字符串。在这种情况下,为什么会有人使用WideCharToString进行转换
感谢这两个操作都从
system.pas
调用\ustromfrompwchar
例程,因此工作方式类似
有人可能更喜欢显式函数调用,而不是隐式转换,以确定真正发生的情况。在Delphi 2009及更高版本中,
String
是UnicodeString
的别名。然而,WideCharToString()
早于UnicodeString
,至少可以追溯到Delphi 5(甚至更早),当时String
是AnsiString
的别名
我不知道为什么需要一个函数。1至少早在Delphi 5,可以将PWideChar
直接分配给AnsiString
,将16位UCS-2/UTF-16数据转换为8位ANSI数据(通过系统
单元中的RTL的LStrFromPWChar()
函数)
1:我怀疑,但无法确认,可能在Delphi 1-4之间的某个时候,直接将PWideChar
分配给字符串
还不受支持,需要显式函数AnsiString
是在Delphi 2中引入的,因此如果Delphi 1中存在WideChartString()
,那么当它仍然是ShortString
的别名时,它可能有助于将16位Unicode数据转换为String
当Delphi 2009中引入UnicodeString
时,旧的基于ANSI的RTL函数被更新(但没有重命名)以支持Unicode,包括WideCharToString()
,使得它现在只复制16位数据,而不是转换它。由于PWideChar
也可以直接分配给UnicodeString
(通过RTL的系统.\u UStrFromPWChar()
函数),WideCharToString()
现在是完全冗余的
2:除非Embarcadero/Idera决定在将来再次更改字符串的类型,否则请使用UTF8String