将 PWideChar 转换为字符串。我应该使用 WideCharToString 吗?
Convert PWideChar to String. Should I use WideCharToString?
我正在使用 Delphi XE3。
在以下代码中:
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
调用 _UStrFromPWChar
例程,因此工作方式相似。
有些人可能更喜欢显式函数调用而不是隐式转换来确定到底发生了什么。
在 Delphi 2009 年及以后,String
是 UnicodeString
的别名。然而,WideCharToString()
早于 UnicodeString
,一直追溯到至少 Delphi 5(甚至更早),当时 String
是 AnsiString
的别名.
为什么需要一个函数,我不知道。 1 至少早在 Delphi 5 之前,一个 PWideChar
就可以直接赋值给一个 AnsiString
,将 16 位 UCS-2/UTF-16数据转换为 8 位 ANSI 数据(通过 System
单元中的 RTL 的 _LStrFromPWChar()
函数)。
1:我怀疑,但无法确认,也许在Delphi1-4之间的某个时候,直接分配一个PWideChar
到 String
尚不支持,需要显式函数。 AnsiString
是在 Delphi 2 中引入的,所以如果 WideCharToString()
存在于 Delphi 1 那么它很可能有助于促进 16 位 Unicode 数据到 String
的转换,当它仍然是 ShortString
.
的别名
在 Delphi 2009 年引入 UnicodeString
时,旧的基于 ANSI 的 RTL 函数已更新(但未重命名)以支持 Unicode,包括 WideCharToString()
,现在仅按原样复制 16 位数据而不是转换它。由于 PWideChar
也可以直接分配给 UnicodeString
(通过 RTL 的 System._UStrFromPWChar()
函数),WideCharToString()
现在完全多余 2.
2:除非Embarcadero/Idera将来决定再次更改String
的类型,对UTF8String
说。
我正在使用 Delphi XE3。
在以下代码中:
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
调用 _UStrFromPWChar
例程,因此工作方式相似。
有些人可能更喜欢显式函数调用而不是隐式转换来确定到底发生了什么。
在 Delphi 2009 年及以后,String
是 UnicodeString
的别名。然而,WideCharToString()
早于 UnicodeString
,一直追溯到至少 Delphi 5(甚至更早),当时 String
是 AnsiString
的别名.
为什么需要一个函数,我不知道。 1 至少早在 Delphi 5 之前,一个 PWideChar
就可以直接赋值给一个 AnsiString
,将 16 位 UCS-2/UTF-16数据转换为 8 位 ANSI 数据(通过 System
单元中的 RTL 的 _LStrFromPWChar()
函数)。
1:我怀疑,但无法确认,也许在Delphi1-4之间的某个时候,直接分配一个PWideChar
到 String
尚不支持,需要显式函数。 AnsiString
是在 Delphi 2 中引入的,所以如果 WideCharToString()
存在于 Delphi 1 那么它很可能有助于促进 16 位 Unicode 数据到 String
的转换,当它仍然是 ShortString
.
在 Delphi 2009 年引入 UnicodeString
时,旧的基于 ANSI 的 RTL 函数已更新(但未重命名)以支持 Unicode,包括 WideCharToString()
,现在仅按原样复制 16 位数据而不是转换它。由于 PWideChar
也可以直接分配给 UnicodeString
(通过 RTL 的 System._UStrFromPWChar()
函数),WideCharToString()
现在完全多余 2.
2:除非Embarcadero/Idera将来决定再次更改String
的类型,对UTF8String
说。