Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 将PWideChar转换为字符串。我应该使用WideCharting吗?_String_Delphi_Widechar - Fatal编程技术网

String 将PWideChar转换为字符串。我应该使用WideCharting吗?

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

我正在使用delphixe3

在以下代码中:

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