How can I convert a Unicode string to an AnsiString?

delphi, delphi-xe4

Solution

You simply assign it:

var
  AnsiStr: AnsiString;
  Str: string;
....
AnsiStr := Str;

The compiler will emit a warning mind you:

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

You can use a cast to suppress that warning:

AnsiStr := AnsiString(Str);

By default that gives no warning, although there is of course still potential for data loss. If you enable warning W1060 then the compiler says:

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

Of course, it's not expected that Delphi XE4 code has much place for the use of `AnsiString`. Unless you have a very specific interop requirement, then text is best held in the native data type, `string`. If you want to operate on byte arrays use `TBytes` or `TArray<Byte>`.

Problem

Trying to move project from Delphi 2007 to Delphi XE4. What is the best way to convert `String` to `AnsiString` in Delphi XE4?

Original source