如何将Unicode字符串转换为AnsiString?

vic*_*ico 5 delphi delphi-xe4

试图将项目从Delphi 2007迁移到Delphi XE4.在Delphi XE4中将String转换为AnsiString的最佳方法是什么?

Dav*_*nan 11

你只需指定它:

var
  AnsiStr: AnsiString;
  Str: string;
....
AnsiStr := Str;
Run Code Online (Sandbox Code Playgroud)

编译器会发出警告,提醒您:

W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString'

您可以使用强制转换来抑制该警告:

AnsiStr := AnsiString(Str);
Run Code Online (Sandbox Code Playgroud)

默认情况下,虽然当然仍有数据丢失的可能性,但不会发出警告.如果启用警告W1060,编译器会说:

W1060 Explicit string cast with potential data loss from 'string' to 'AnsiString'

当然,并不期望Delphi XE4代码有很多可供使用的地方AnsiString.除非您有非常具体的互操作要求,否则文本最好保留在本机数据类型中string.如果要对字节数组进行操作,请使用TBytesTArray<Byte>.

  • 许多串行通信协议使用AnsiString.由于AnsiString D2009 +在D2007中不等于AnsiString,因此能够以合理的方式处理这一问题需要仔细规划. (7认同)
  • @jep D2009 AnsiString包含有效负载的代码页. (4认同)